На вход программе подаются сведения о номерах школ учащихся, участвовавших в олимпиаде. В первой строке сообщается количество учащихся N, каждая из следующих N строк имеет следующий формат: <Фамилия> <Инициалы> <номер школы>, где <Фамилия> - строка, состоящая не более чем из 20 символов, <Инициалы> - строка, состоящая из 4-х символов (буква, точка, буква, точка), <номер школы> - не более чем двузначный номер. <Фамилия> и <Инициалы>, а также <Инициалы> и <номер школы> разделены одним пробелом. Пример входной строки:
Иванов П. С. 57
Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет выводить на экран информацию, из какой школы (школ) было больше всего участников олимпиады.
var nс:аrrау[1..99] of integer; {массив числа участников от каждой школы, индекс каждого элемента – номер школы}
р:1..99; {целый тип переменной задан диапазоном значений}
{хотя можно и p:byte; ведь правильные входные данные гарантированы}
с: char;
i, k, N, max: integer;
begin
readln(N); //количество учащихся
for i:=l to 99 do nc[i]:=0;//обнуление,пусть видят,что Вы понимаите суть дела.
for i:=l to N do
begin
repeat
read(c)
until с=' '; {считана фамилия}
repeat
read(c)
until с=' '; {считаны инициалы}
readln(p); //вводим номер школы
nc[p]:=nc[p]+1;//добавляем ещё участника в соответствующую школу
end;
max:=0;
for i:=1 to 99 do
if nc[i]>0 then
if nc[i]>max then max:=nc[i];//поиск максимума
for i:=l to 99 do
if nc[i]=max then writeln(i);//вывод номера школы
readln
end.


В массиве nc[] - индексом является номер школы. Почему бы сразу не находить номер индекса (школы) с максимальным элементом (количеством школьников). Можно два последних цикла заменить одним.
nmax:=1;
for i:=2 to 99 do
if nc[i]>nc[nmax] then nmax:=i;
В таком случае программа выведет много раз новые максимумы.