Страницы

Поиск по вопросам

воскресенье, 26 января 2020 г.

Как найти среднее (медиану) из трёх чисел?

#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); }

Комментариев нет:

Отправить комментарий