e-olymp 8358. Среднее значение — 1

Задача

Проект «Средний вес школьника школы» решили выполнить Мамед с Самедом. Что они будут делать с этим числом, они не раскрывают. Они попросили взвеситься всех учеников школы и занесли результаты в таблицу. Помогите им подсчитать средний вес учеников. Но они просят, чтобы учеников с самым большим и с самым маленьким весом не учитывать. Единственное их упущение, они не подсчитали общее количество учеников, но это, конечно, не помешает вам подсчитать то, что они просят.

Входные данные

В нескольких строках заданы веса учеников в килограммах, разделенных пробелами (одним или несколькими) или символом конца строки. Читать веса учеников до конца ввода.

Выходные данные

Средний вес учеников школы без учета учеников с самым большим и самым маленьким весом. Ответ выводить с точностью до килограмм.

Тесты

Входные данные Выходные данные
40   23 27

59 68 23    84   27

53 46

46
5 5 5 5 5 5 5 5 5 5 6 6 5 6 5 6 6 5 6

5  6 5 5 5 5  5  5

5 5 6 6 5 6 8

6
                        1

3

3          4         5 4        6 10

4                    58

5
1 2 0
50 51 52 53 54 55 56 57 58 59

40 34  32

90 91 92 93 94 95 96 97 98 99

70
5 5 5 5 5 5 5 5 5 5 6 6 5 6 5 6 6 5 6

5  6 5 5 5 5  5  5

5 5 6 6 5 6

0
80 99 81 98 82 97

83 96 84 95 85 95

90

Решение

 

Объяснение

Для решения задачи создаём переменные, в которых будем хранить значение суммы всех ве́сов учеников, количество взвешенных, максимальное и минимальное значение из их ве́сов, и количество учеников с таковыми значениями. Далее считываем значения, сразу обрабатывая их. При получении первой переменной ($n=0$), записываем значение и как минимум, и как максимум. Потом сравниваем остальные значения с данным. Если следующие значения больше или меньше, перезаписываем значение соответствующей переменной, также сбрасываем счётчик, который считает, сколько учеников с такой массой. Для каждого случая прописано отдельное условие, поскольку минимум может быть одновременно и максимумом.

После того, как все данные были считаны, выполняем проверку: если количество учеников с минимальным и максимальным весом равно общему количеству взвешенных, то, поскольку нам нужно вывести значение без минимума и максимума, выводим $0$. В противном случае, выводим округлённое значение среднего арифметического без крайних значений.

ideone

e-olymp

Related Images:

2 thoughts on “e-olymp 8358. Среднее значение — 1

  1. У нас все входящие значения целочисленные и ответ требуется целочисленным. Логично было бы все вычисления постараться сделать в целых числах. Это не из соображений красоты, но практичности — целые числа хранятся абсолютно точно, а вот дробные нет. Соответствено, если бы веса были не в килограммах, а в нанограммах, к примеру, можно было бы самым удивительным образом получить неверный ответ при математически верных формулах.

    Прошу Вас подумать, что нужно прибавить к числителю дроби a / b, чтобы результатом целочисленного деления было отношение этих чисел, округленное до ближайшего целого.

    • Да, спасибо, этот момент я не учитывал. Сомневаюсь, что это тот ответ, который от меня ждали, но он проходит тесты и использует целые числа.
      В коде всё тоже самое, но вместо предпоследней строки— это:
      n == kM + km? cout << 0 : cout << (2*(sum-kM*M-km*m)+n-kM-km)/(2*(n-kM-km));
      Идея в том, что к $a$ нужно добавить $0.5*b$, роль чего и выполняет появившееся слагаемое.

Добавить комментарий