Спортсменам-фигуристам n судей выставляют оценки. Технический работник соревнований изымает все максимальные и все минимальные оценки, а для остальных
оценок вычисляет среднее арифметическое значение. Этот результат считается баллом,
полученным спортсменом. Найдите такой балл для каждого спортсмена.
Вход. В первой строке находятся два
целых числа: количество судей n и количество спортсменов m. В
следующих m строках находятся n целых чисел – оценки всех судей (0
< n ≤ 10, 0 < m ≤ 100) для каждого из
фигуристов.
Выход. В одной строке выведите m чисел с точностью до двух десятичных знаков – балл
каждого спортсмена.
Пример
входа |
Пример
выхода |
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 |
обработка
массивов
Анализ алгоритма
Для каждого
спортсмена найдем минимальную min и максимальную max оценку. Далее для каждого спортсмена вычислим средний балл, не
учитывающий min и max.
Пример
Для первого
фигуриста наименьшей оценкой будет 7, наибольшей 10. Среднее арифметическое оценок,
не равных 7 и 10, равно (8 + 9 + 8) / 3 = 8.33.
Для последнего
фигуриста наименьшей оценкой будет 7, наибольшей 10. Среднее арифметическое оценок,
не равных 7 и 10, равно (8 + 9) / 2 = 8.50.
Реализация алгоритма
Читаем входные
данные.
scanf("%d %d", &n, &m);
Последовательно обрабатываем данные каждого фигуриста.
for (i = 0; i < m; i++)
{
scanf("%d", &mas[0]);
Находим наименьшую min и наибольшую max оценку для
текущего i-го фигуриста.
min = max = mas[0];
for (j = 1; j < n; j++)
{
scanf("%d", &mas[j]);
if (mas[j] > max) max =
mas[j];
if (mas[j] < min) min =
mas[j];
}
Находим среднее арифметическое оценки текущего спортсмена.
Сумму его оценок вычисляем в переменной sum, количество – в cnt.
sum = cnt = 0;
for (j = 0; j < n; j++)
Наименьший и наибольший баллы не учитываются.
if ((mas[j] != min) && (mas[j] != max))
{
sum += mas[j];
cnt++;
}
Вычисляем и выводим среднее арифметическое i-го фигуриста.
res = 1.0 * sum / cnt;
printf("%.2lf ", res);
}
printf("\n");