static int abc(int x) {
if (x < 0) {
return -x;
}
return x;
}
static int minThree(int a, int b, int c) {
if (a <= b && a <= c) {
return a;
} else if (b <= a && b <= c) {
return b;
} else
return c;
}
public static void main(String[] args) throws Exception {
//напишите тут ваш код
Scanner sc = new Scanner(System.in);
int one = sc.nextInt();
int two = sc.nextInt();
int three = sc.nextInt();
// в этом варианте валидатор принимает решение
/*if (one <= two && one >= three) {
System.out.println(one);
} else if (one >= two && one <= three) {
System.out.println(one);
} else if (two <= one && two >= three) {
System.out.println(two);
} else if (two >= one && two <= three) {
System.out.println(two);
} else if (three <= one && three >= two) {
System.out.println(three);
} else {
System.out.println(three);
}
*/
int medium = (one + two + three) / 3;
int a = abc(medium - one);
int b = abc(medium - two);
int c = abc(medium - three);
int[] arr = {a, b, c};
if (minThree(a, b, c) == a) {
System.out.println(one);
}
else if (minThree(a, b, c) == b) {
System.out.println(two);
}
else if (minThree(a, b, c) == c) {
System.out.println(three);
}
}KapibaraZ
10 уровень
почему с ветвлением работает, а через среднее значение нет
Обсуждается
Комментарии (10)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Brave Trideavour
13 июля 2018, 14:25полезный
Условие задачи не требует искать среднее арифметическое, при том, что (one + two + three) / 3 не всегда равно a, b или c.
+1
KapibaraZ
13 июля 2018, 15:51
Возможно ты прав, метод возвращает int и при округлении целого, возвращает в меньшую сторону, нужно было использовать дабл или флоат. Спасибо) "при том, что (one + two + three) / 3 не всегда равно a, b или c." правда эту строчку не понял, можешь объяснить
0
Brave Trideavour
15 июля 2018, 02:50
Если берем one = 1, two = 2, three = 3, то среднее (не самое большое и не самое малое) число равно 2 и среднее арифметическое ((one + two + three) / 3) тоже равно 2. Если же берем one = 2, two = 7, three = 8, то среднее 7, а среднее арифметическое 5,66667. Уже здесь искажается условие (мы начинаем оперировать с числом, которое не вводили). Затем в коде среднее арифметическое подвергается серии математических операций, которые не приближают к ответу, требуемому по условию. Попробуй сделать пошаговый дебаг своего кода в IJ и сразу ясным станет все.
Ветвление в данном случае лучшая альтернатива, так как просто работает с данными числами путем их сравнения друг с другом и выдает в качестве ответа число - не самое большое и не самое малое из сравниваемых.
0
Alex MExpert
12 июля 2018, 12:59полезный
тут из за синтаксической ошибки (стр8) он и компилироваться не должен..
+1
KapibaraZ
13 июля 2018, 14:00
какая именно синтаксическая ошибка , подскажи пожалуйста
0
Артем DivertittoSenior Android-разработчи в United TechMaster
13 июля 2018, 14:11
Вызываешь ты этот метод minOfThree(a, b, c) - но он не создан
0
KapibaraZ
13 июля 2018, 15:49
он не возвращает значения ?
0
KapibaraZ
13 июля 2018, 15:52
что ты имеешь ввиду под не создан ?
0
Артем DivertittoSenior Android-разработчи в United TechMaster
13 июля 2018, 15:53
У тебя есть метод minThree а ты вызываешь minOfThree
0
KapibaraZ
13 июля 2018, 15:56
опечатка , сейчас поменяю спасибо, что заметил
0