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