#java #алгоритм
Имеется три числа: 10, 20, 30. Как найти среднее из них (не самое большое и не самое маленькое), без множества условий?
Ответы
Ответ 1
Отсортировать и взять среднее. public static void main(String[] args) { int[] numbers = new int[] {31, 6, 13}; Arrays.sort(numbers); System.out.println(numbers[1]); }Ответ 2
int max = Math.max(Math.max(a,b), c); int min = Math.min(Math.min(a,b), c); int mid = a + b + c - (min + max);Ответ 3
Можно через условие тернарными операторами int mid = (a > b)? ((cc)?a:(b>c)?c:b);Ответ 4
Держи ещё вариант с одним ифом, а не несколькими: private int middleOfThree(int[] input) { int x = Math.max(input[0], input[1]); int y = Math.max(input[0], input[2]); if (x == y) { return Math.max(input[1], input[2]); } else { return Math.min(x, y); } }Ответ 5
import static java.lang.Math.*; int[] digits = {20, 10, 30}; System.out.println(max(max(min(digits[0], digits[1]), min(digits[1], digits[2])), min(digits[0], digits[2])));Ответ 6
Решение, используя сеть сортировки, построенной на основе метода пузырьков, из ответа @Gyorgy Szekely: int median = Math.max(Math.min(a, b), Math.min(Math.max(a, b), c)); Полный пример: public class MedianOf3 { public static void main(String[] argv) { System.out.println(median(10, 20, 30)); } public static int median(int a, int b, int c) { return Math.max(Math.min(a, b), Math.min(Math.max(a, b), c)); } } Вывод: 20 См. Fastest way of finding the middle value of a triple?Ответ 7
Вам в любом случае придется использовать условия - пусть даже внешне они будут скрыты в вызовах готовых методов для сортировки (Collections.sort, Arrays.sort и т.п.) или получения мин./макс. значений (Math.min, Math.max и т.п.). Лучше написать простенькую функцию с парой условий - это гарантированно будет работать быстрее. private static int getMed(int a, int b, int c) { return (a >= b && a <= c) || (a <= b && a >= c) ? a : ((b >= a && b <= c) || (b <= a && b >= c) ? b : c); }
Комментариев нет:
Отправить комментарий