Задача
Проект «Средний вес школьника школы» решили выполнить Мамед с Самедом. Что они будут делать с этим числом, они не раскрывают. Они попросили взвеситься всех учеников школы и занесли результаты в таблицу. Помогите им подсчитать средний вес учеников. Но они просят, чтобы учеников с самым большим и с самым маленьким весом не учитывать. Единственное их упущение, они не подсчитали общее количество учеников, но это, конечно, не помешает вам подсчитать то, что они просят.
Входные данные
В нескольких строках заданы веса учеников в килограммах, разделенных пробелами (одним или несколькими) или символом конца строки. Читать веса учеников до конца ввода.
Выходные данные
Средний вес учеников школы без учета учеников с самым большим и самым маленьким весом. Ответ выводить с точностью до килограмм.
Тесты
Входные данные | Выходные данные |
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 |
Решение
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> using namespace std; int main() { long long sum = 0, kM = 0, km = 0, n = 0; int mass = 0, M = 0, m = 0; while(cin >> mass){ if(n == 0){ M = mass; m = mass; km = 1; kM = 1; } else{ if(mass > M){ M = mass; kM = 1; } else if(mass == M) kM++; if(mass < m){ m = mass; km = 1; } else if(mass == m) km++; } sum += mass; n++; } n == kM + km? cout << 0 : cout << (2*(sum-kM*M-km*m)+n-kM-km)/(2*(n-kM-km)); return 0; } |
Объяснение
Для решения задачи создаём переменные, в которых будем хранить значение суммы всех ве́сов учеников, количество взвешенных, максимальное и минимальное значение из их ве́сов, и количество учеников с таковыми значениями. Далее считываем значения, сразу обрабатывая их. При получении первой переменной ($n=0$), записываем значение и как минимум, и как максимум. Потом сравниваем остальные значения с данным. Если следующие значения больше или меньше, перезаписываем значение соответствующей переменной, также сбрасываем счётчик, который считает, сколько учеников с такой массой. Для каждого случая прописано отдельное условие, поскольку минимум может быть одновременно и максимумом.
После того, как все данные были считаны, выполняем проверку: если количество учеников с минимальным и максимальным весом равно общему количеству взвешенных, то, поскольку нам нужно вывести значение без минимума и максимума, выводим $0$. В противном случае, выводим округлённое значение среднего арифметического без крайних значений.