После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько баллов набрал. Эта информация в том же виде была разослана в школы. Завуч школы № 50 решила наградить двух учащихся, которые лучше всех в школе сдали информатику. Программа должна вывести на экран фамилии и имена этих учеников.
Если наибольший балл набрало больше двух человек — вывести количество таких учеников.
Если наибольший балл набрал один человек, а следующий балл набрало несколько человек — нужно вывести только фамилию и имя лучшего.
Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5-ти учеников школы № 50.
На вход программе сначала подаётся число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:
<Фамилия> <Имя> <Номер школы> <Количество баллов> где <Фамилия> — строка, состоящая не более, чем из 30 символов без пробелов, <Имя> — строка, состоящая не более чем из 20 символов без пробелов, <Номер школы> — целое число в диапазоне от 1 до 99, <Количество баллов> — целое число в диапазоне от 1 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть всего по три пробела в каждой строке).
Пример входной строки:
Иванов Иван 50 87
Пример выходных данных:
Круглов Василий Тарасова Дарья
Другой вариант выходных данных:
7
Третий вариант выходных данных:
Гусарский Илья
Ответ:
ПАСКАЛЬ
var S,Smax,Smax2:string[52];
ch:char;
i, N, sh,ball, max, nmax, max2, nmax2 : integer;
begin
max:=-1; Smax:=''; nmax:=0;
max2:=-1;
readln(N); {считали количество строк}
for i:=1 to N do {перебираем все входные строки}
begin s : = " ; repeat
read(ch);
s:=s+ch
until ch=' ';{считана фамилия и запомнена в переменной s}
repeat
read(ch);
s : = s+ch
until ch=' ' ; {считано имя и добавленак переменной s}
readln(sh,ball); {считали номер школы и балл ученика}
if sh=50 then {обрабатываем только учеников 50-й школы}
if ball>max then {текущий балл - лучший}
begin
max2:=max; Smax2:=Smax; nmax2:=nmax;
max : =bal 1; Smax : = s; nmax : = 1
end
else
if ball=max then {текущий балл - такой же, как лучший}
begin
nmax:=nmax+1; max2:=max; Smax2:=S end
else
if ball>max2 then {текущий балл - лучше второго}
begin
max2:=ball; Smax2:=S; nmax2:=1
end
else
if ba1l=max2 then {текущий балл такой же, как второй}
nmax2 : =nmax2 + l
end;
if (nmax=2) or (nmax= 1) and (nmax2 = 1) then {два лучших ученика}
begin
writeln (Smax) ;
writeln(Smax2)
end
else
if (nmax=l) and (nmax2>l) then {один лучший ученик}
writeln(Smax)
else
writeln(nmax) {лучших учеников больше двух}
end.

