7368. Средний бал для фигуристов

 

На соревнованиях по фигурному катанию n судей выставляют оценки спортсменам. Технический работник соревнований удаляет все максимальные и минимальные оценки, а из оставшихся вычисляет среднее арифметическое. Этот результат считается итоговым баллом спортсмена. Определите итоговый балл для каждого спортсмена.

 

Вход. В первой строке заданы два целых числа: количество судей n (0 < n ≤ 10) и количество спортсменов m (0 < m ≤ 100). В следующих m строках содержится n целых чисел – оценки всех судей для каждого фигуриста.

 

Выход. Выведите в одной строке 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.

 

Реализация алгоритма

Читаем количество судей n и количество спортсменов m.

 

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");

 

Python реализация

Читаем количество судей n и количество спортсменов m.

 

n, m = map(int,input().split())

 

Последовательно обрабатываем данные каждого фигуриста.

 

for _ in range(m):

  lst = list(map(int,input().split()))

 

Находим наименьшую min и наибольшую max оценки для текущего фигуриста.

 

  min_el = min(lst)

  max_el = max(lst)

 

Вычисляем:

·        Сумму оставшихся оценок в переменной s.

·        Количество оставшихся оценок в переменной cnt.

 

  s = sum(x for x in lst if x != min_el and x != max_el)

  cnt = sum(1 for x in lst if x != min_el and x != max_el)

 

Вычисляем и выводим среднее арифметическое оценки для текущего фигуриста.

 

  print("%.2f" %(s / cnt), end = ' ')