Задача. Среднее значение — 1
Проект «Средний вес школьника школы» решили выполнить Мамед с Самедом. Что они будут делать с этим числом, они не раскрывают. Они попросили взвеситься всех учеников школы и занесли результаты в таблицу. Помогите им подсчитать средний вес учеников. Но они просят, чтобы учеников с самым большим и с самым маленьким весом не учитывать. Единственное их упущение, они не подсчитали общее количество учеников, но это, конечно, не помешает вам подсчитать то, что они просят.
Входные данные
В нескольких строках заданы веса учеников в килограммах, разделенных пробелами (одним или несколькими) или символом конца строки. Читать веса учеников до конца ввода.
Выходные данные
Средний вес учеников школы без учета учеников с самым большим и самым маленьким весом. Ответ выводить с точностью до килограмм.
Тесты
№ | Ввод | Вывод |
1 | 40 23 27 59 68 23 84 27 53 46 | 46 |
2 | 21 22 23 24 25 26 27 28 20 30 29 | 25 |
3 | 10 20 10 20 10 20 10 20 11 | 11 |
4 | 60 45 70 90 55 | 62 |
5 | 80 80 80 70 83 90 90 90 | 81 |
6 | 50 90 70 70 70 70 70 70 70 70 74 | 70 |
7 | 70 70 70 70 70 70 70 70 70 70 70 70 70 60 50 90 | 69 |
Решение
Считываем все числа, считаем их количество и сумму. Затем из количества вычитаем количество минимальных и максимальных значений, а из суммы их соответственные произведения на эти числа.
Код через потоковую обработку
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 |
#include <iostream> using namespace std; int main() { int count = 0, min, max, cmin = 1, cmax = 1, weight; unsigned long long sum = 0; cin >> min >> max; if (min > max) swap(min, max); while (cin >> weight) { if (weight < min) { sum += min*cmin; min = weight; count += cmin; cmin = 1; } else if (weight == min) cmin++; else if (weight > max) { sum += max*cmax; max = weight; count += cmax; cmax = 1; } else if (weight == max) cmax++; else { sum += weight; count++; } } cout << sum / count + 1 * (sum % count > count / 2); return 0; } |
Код через vector
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { int count, elem; unsigned long long sum = 0; vector<int> vec; while (cin >> elem) vec.push_back((sum += elem, elem)); sort (vec.begin(), vec.end()); int i = 0; while (vec[i] == vec[0]) sum-=vec[i++]; count = vec.size()-i; int j = vec.size()-1; while (vec[j] == vec[vec.size()-1]) sum-=vec[j--]; j = vec.size()-1 - j; count -= j; cout << sum / count + 1 * (sum % count >= count / 2.); return 0; } |
Код через map
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <iostream> #include <map> using namespace std; int main() { int count = 0, elem; unsigned long long sum = 0; map<int, int> MAP; while (cin >> elem) { if (MAP.find(elem) == MAP.end()) MAP[elem] = 1; else MAP[elem]++; sum += elem; count++; } sum -= MAP.begin()->first * MAP.begin()->second + (--MAP.end())->first * (--MAP.end())->second; count -= MAP.begin()->second + (--MAP.end())->second; cout << sum / count + 1 * (sum % count > count / 2); return 0; } |
- Задача на e-olymp
- Код через потоковую обработку на ideone
- Код через vector на ideone
- Код через map на ideone
Для отправки комментария необходимо войти на сайт.