После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик, какой школы сколько набрал баллов. Эта информация в том же виде была разослана в школы.
Завуч школы №30 решила наградить двух учащихся, которые лучше всех сдали информатику.
Программа должна вывести на экран фамилии и имена этих учеников.
Если наибольший балл набрало больше двух человек — вывести количество таких учеников.
Если наибольший балл набрал один человек, а следующий балл набрало несколько человек — нужно вывести только фамилию и имя лучшего.
Напишите эффективную, в том числе и по используемой памяти, программу(укажите используемую версию языка программирования),которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5 учеников школы №30.
На вход программе сначала подается число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:
<Фамилия><Имя><Номер школы><Количество баллов>
<Фамилия> — строка, состоящая не более чем из 30 символов без пробелов,
<Имя> — строка, состоящая не более чем из 20 символов.
<Номер школы> — число в диапазоне от 1 до 99
<Количество баллов> — число в диапазоне от 1 до 100.
Эти данные записаны через пробел, то есть в каждой строке ровно 3 пробела.
var Str,Strmax1,Strmax2:string[52];
symbol:char;
i,N,number,ball,max1,max2, nmax1, nmax2:integer;
Begin
max1:=-1;
max2:=-1;
nmax1:=0;
nmax2:=0;
Strmax1:='';
number:=0;
Writeln('Введите количество учеников: ');
readln(N);
for i:=1 to N do
begin
str:=''; //обнуление строки
Repeat //считываем до пробела
read(symbol); //каждый символ
Str:=Str+symbol; //прибавляем к строке
Until symbol=' '; //Фамилия считана
Repeat
read(symbol);
Str:=Str+symbol;
Until symbol=' '; //Имя считано,прибавлено к строке
read(number); //считываем номер
read(ball); //считываем балл
if number=30 then
begin //нас интересуют ученики только 30 школы
if ball>max1 then //если текущий балл больше максимального
begin
max2:=max1; //бывший максимум-второй максимум
max1:=ball; //максимальный балл-текущий балл
Strmax2:=Strmax1; //бывший лучший теперь второй лучший
Strmax1:=Str; //текущий ученик набрал максимальный балл
nmax2:=nmax1;
nmax1:=1; //счетчик самых лучших равен 1
end
else if ball=max1 then
begin//если текущий балл равен максимальному
nmax1:=nmax1+1;
Strmax2:=str;
nmax2:=nmax1;
end
else if ball>max2 then //если текущий балл больше второго лучшего
begin
max2:=ball;
Strmax2:=Str;
nmax2:=1;
end
else if ball=max2 then nmax2:=nmax2+1; //если текущий балл равен 2 лучшему
end;
end;
if (nmax1 > 2) then writeln(nmax1); //если лучших много
if (nmax1=2) then //если 2 ученика лучшие
begin
writeln(Strmax1);
writeln(Strmax2);
end;
if (nmax1 = 1) and (nmax2 > 1) then writeln(Strmax1); //если один лучший и много вторых
if (nmax1 = 1) and (nmax2 =1) then //если один лучший и один второй результат
begin
writeln(Strmax1);
writeln(Strmax2);
end;
End.

