8358. Среднее значение – 1

 

ПроектСредний вес школьника школырешили выполнить Мамед и Самед.

Для чего именно им понадобится это число, они не раскрывают. Они попросили всех учеников школы взвеситься и записали результаты в таблицу. Ваша задача – помочь им рассчитать средний вес учеников. Однако есть условие: при расчёте не нужно учитывать учеников с самым большим и самым маленьким весом.

Стоит отметить, что Мамед и Самед забыли подсчитать общее количество учеников, но это не станет для вас преградой в выполнении задачи.

 

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

 

Выход. Выведите средний вес учеников школы, исключая учеников с самым большим и самым маленьким весом. Ответ следует вывести с округлением до целых килограммов.

 

Пример входа

Пример выхода

40   23 27

  59 68 23    84   27

53 46

46

 

 

РЕШЕНИЕ

массив

 

Анализ алгоритма

Найдем наименьший min и наибольший max элемент массива. Затем вычислим сумму весов всех учеников, исключив тех, у кого вес равен наименьшему или наибольшему значению. Обозначим эту сумму s, а количество таких учеников cnt.

Остаётся вычислить средний вес учеников, разделив s на cnt, и вывести результат, округлённый до целого числа килограммов.

 

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

Объявим рабочий массив.

 

int w[1000];

 

Читаем входные данные. Количество входных чисел подсчитываем в переменной n.

 

n = 0;

while (scanf("%d", &w[n]) == 1) n++;

 

Находим наименьший min и наибольший max элемент массива.

 

min = max = w[0];

for (i = 0; i < n; i++)

{

  if (w[i] > max) max = w[i];

  if (w[i] < min) min = w[i];

}

 

Вычисляем сумму весов s и количество учеников cnt, исключив учеников с наибольшим и наименьшим весом.

 

s = cnt = 0;

for (i = 0; i < n; i++)

  if (w[i] != min && w[i] != max)

  {

    s = s + w[i];

    cnt++;

 }

 

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

 

printf("%.0lf\n", 1.0 * s / cnt);

 

Реализация алгоритма – min_element, max_element

Объявим рабочий массив.

 

vector<int> w;

 

Читаем входные данные.

 

while (scanf("%d", &x) == 1)

  w.push_back(x);

 

Находим наименьший min_el и наибольший max_el элемент массива.

 

min_el = *min_element(w.begin(), w.end());

max_el = *max_element(w.begin(), w.end());

 

Вычисляем сумму весов s и количество учеников cnt, исключив учеников с наибольшим и наименьшим весом.

 

s = cnt = 0;

for (int x : w)

  if (x != min_el && x != max_el)

  {

    s += x;

    cnt++;

  }

 

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

 

printf("%.0lf\n", 1.0 * s / cnt);

 

Python реализация

 

import sys

 

Читаем входные данные.

 

lst = []

for line in sys.stdin:

  lst.extend(map(int,line.split()))

 

Находим наименьший min_el и наибольший max_el элемент списка.

 

max_el = max(lst)

min_el = min(lst)

 

Вычисляем сумму весов s и количество учеников cnt, исключив учеников с наибольшим и наименьшим весом.

 

cnt = sum = 0

for x in lst:

  if x != max_el and x != min_el:

    cnt += 1

    sum += x

 

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

 

res = round(sum / cnt)

print(res)