Присоединиться

11 класс·высокий уровень

Районный методист решила выяснить номер школы, ученики которой набрали

Условие

После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько баллов набрал.

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

Программа должна вывести на экран номер такой школы и её средний балл.

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

Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5-ти учеников района. Также известно, что в районе школы с некоторыми номерами не существуют. На вход программе сначала подаётся число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате: <Фамилия> <Имя> <Номер школы> <Количество баллов> где <Фамилия> — строка, состоящая не более чем из 30 символов без пробелов, <Имя> — строка, состоящая не более чем из 20 символов без пробелов, <Номер школы> — целое число в диапазоне от 1 до 99, <Количество баллов> — целое число в диапазоне от 1 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть всего по три пробела в каждой строке).Пример входной строки: Иванов Иван 50 87Пример выходных данных: Школа с лучшим средним баллом 10 Наибольший средний балл = 84Другой вариант выходных данных: Всего школ: 3Наибольший средний балл = 78

Формат задания

Развёрнутый ответ: короткого ответа здесь нет — оценивается само рассуждение. Разбор откроется после входа.

Решение по шагам

  1. Как рассуждать

    ПАСКАЛЬvar points, npupils, mean:array[1..100] of integer; ch:char;i,N, school,p,k, max:integer;beginfor i:=1 to 100 do {обнуляем массивы} beginpoints[i]:= 0; mean[i]:=0;npupils[i]:=0;end;readln(N); {считали количество строк} for i:=1 to N do {перебираем все входные строки} begin repeatread(ch)until ch=' ';{считана фамилия} repeatread(ch) until ch=' ';{считано имя}readln(school,p); {считали номер школы и балл ученика}points[school]:=points[school] + p; {накапиливаем балл учеников для расчёта среднего в дальнейшем}npupils[school]:=npupils[school] + 1; {накапливаем количество учеников в школе}end;for i:=1 to 100 do {Вычисляем средний балл в каждой школе с точностью до целого}beginmean[i]:= points[i] div npupils[i];end;max:=-1;for i:=1 to 100 do {Находим школы с наибольшим средним баллом и запоминаем их количество}beginif mean[i]>max then beginmax:=mean[i];k:=1;endelse if mean[i]=max then begink:=k+1;end;end;if k > 1 thenbeginwriteln('Всего школ:', k);writeln('Наибольший средний балл =', max);endelsebeginwriteln('Школа с лучшим средним баллом');writeln('Наибольший средний балл =', max);end;end.

Осталось ещё 1 шаг

  1. Приводим решение Валентина Добрингского на…

Получить полное решение

Бесплатно · займёт минуту

Другие задачи по теме «Обработка символьных строк»