Эта информация в том же виде была разослана в школы. Завуч школы №30
Условие
После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик, какой школы сколько набрал баллов. Эта информация в том же виде была разослана в школы.
Завуч школы №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; Beginmax1:=-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; endelse if ball=max2 then nmax2:=nmax2+1; //если текущий балл равен 2 лучшемуend;end;if (nmax1 >
Осталось ещё 3 шага
then writeln(nmax1); //если лучших многоif…
then writeln(Strmax1); //если один лучший и…
and (nmax2 =1) then //если один лучший и один…
Бесплатно · займёт минуту