Задача
Спортсменам-фигуристам [latex]n[/latex] судей выставляют оценки. Технический работник соревнований изымает все максимальные и все минимальные оценки, а для остальных оценок вычисляет среднее арифметическое значение. Этот результат считается баллом, полученным спортсменом. Найти такой балл для каждого спортсмена.
Входные данные
В первой строке находятся два целых числа: количество судей [latex]n[/latex] и количество спортсменов [latex]m[/latex]. В следующих [latex]m[/latex] строках находятся [latex]n[/latex] целых чисел – оценки всех судей [latex](0 < n \leqslant 10, 0 < m \leqslant 100)[/latex] для каждого из фигуристов.
Выходные данные
В одной строке вывести [latex]m[/latex] чисел с точностью до двух десятичных знаков — балл каждого спортсмена.
Тесты
# | Входные данные | Выходные данные |
---|---|---|
1 | 5 4 7 8 9 8 10 6 5 5 4 7 9 9 10 7 7 7 7 10 9 8 |
8.33 5.33 9.00 8.50 |
2 | 6 3 6 7 6 5 4 3 9 8 5 5 6 5 7 6 4 1 2 2 |
5.25 7.00 3.50 |
3 | 4 5 6 7 8 6 9 8 5 4 7 6 7 5 4 3 9 3 7 8 7 6 |
7.00 6.50 6.00 4.00 7.00 |
4 | 4 4 7 7 2 3 9 8 3 3 5 4 9 7 4 3 2 6 |
3.00 8.00 6.00 3.50 |
5 | 8 5 4 5 6 7 7 4 9 8 3 5 6 6 7 8 5 9 7 6 3 9 3 7 9 7 5 6 4 3 7 7 5 7 9 8 4 6 7 9 9 4 |
6.60 6.17 6.75 5.00 7.00 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import java.util.*; import java.lang.*; import java.io.*; public class Main { public static void main (String[] args) throws java.lang.Exception { double n, m; double x, min = 100, max = -100, sum = 0, a = 0, b = 0; Scanner in = new Scanner(System.in); n = in.nextDouble(); m = in.nextDouble(); for (int i = 0; i < m; i++){ for (int j = 0; j < n; j ++){ x = in.nextDouble(); if (max == x) a++; if (max < x) { if (max != min) sum += a*max; a = 1; max = x; } if ( min == x) b++; if (min > x) { if (max != min) sum += b*min; b = 1; min = x; } if (x!= min && x != max) sum += x; } if(i == m-1) System.out.printf("%.2f", sum / (n - a - b)); else System.out.printf("%.2f ", sum / (n - a - b)); sum = a = b = 0; min = 100; max = -100; } } } |
Решение задачи
Для решения задачи нам необходимо изъять все минимальные и максимальные значения в каждой строчке. Переменные [latex]a[/latex] и [latex]b[/latex] — это количество вхождений максимума и минимума соответственно. Берем любой элемент строки, который обозначили переменной [latex]x,[/latex] и будем считать, что он минимальный и максимальный. Далее сравниваем элементы между собой и находим максимум и минимум и подсчитываем их количество. Ещё нам необходимо посчитать сумму оставшихся значений, а также их количество по формуле [latex]n — a — b.[/latex] А затем вычисляем среднее арифметическое для оставшихся значений по формуле [latex]\displaystyle\frac{sum}{n — a — b}[/latex] и выводим результат.
Ссылки
Ссылка на e-olymp
Ссылка на ideone