Задача
Спортсменам — фигуристам [latex]n[/latex] судей выставляют оценки. Технический работник соревнований изымает все максимальные и все минимальные оценки, а для остальных оценок вычисляет среднее арифметическое значение. Этот результат считается баллом, полученным спортсменом. Найти такой балл для каждого спортсмена.
Входные данные
В первой строке находятся два целых числа: количество судей [latex]n[/latex] и количество спортсменов [latex]m[/latex]. В следующих [latex]m[/latex] строках находятся [latex]n[/latex] целых чисел – оценки всех судей [latex](0 < n ≤ 10, 0 < m ≤ 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 |
#include <iostream> #include <iomanip>//данная библиотека позволяет устанавливать количество знаков после запятой #include <cmath>//данная библиотеа помогает вычислить min и max #include <climits>//определяет константы с ограничениями целочисленного типа данных using namespace std; int main() { double n, m; double x, min = INT_MAX, max = INT_MIN, sum = 0, a = 0, b = 0; cin >> n >> m; for (int i = 0; i < m; i++){ for (int j = 0; j < n; j ++){ cin >> x; 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 and x != max) sum += x; } cout << fixed << setprecision(2) << sum / (n - a - b) << " ";//функция с её аргументом позволяет вывеси результат, округлённый до двух десятичных знаков sum = a = b = 0; min = INT_MAX; max = INT_MIN; } return 0; } |
Решение задачи
Для решения задачи нам необходимо изъять все минимальные и максимальные значения в каждой строчке. Переменные [latex]a[/latex] и [latex]b[/latex] — это количество вхождений максимума и минимума соответственно. Берем любой элемент строки, который обозначили переменной [latex]x[/latex], и будем считать, что он минимальный и максимальный. Далее сравниваем элементы между собой и находим максимум и минимум и подсчитываем их количество. Ещё нам необходимо посчитать сумму оставшихся значений, а также их количество по формуле [latex]n-a-b[/latex]. А затем вычисляем среднее арифметическое для оставшихся значений по формуле [latex]\frac{sum}{n-a-b}[/latex] и выводим результат.
Ссылка на e-olymp
Ссылка на ideone