Присоединиться

11 класс·высокий уровень

Эта информация в том же виде была разослана в школы. Завуч школы №30

Условие

После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик, какой школы сколько набрал баллов. Эта информация в том же виде была разослана в школы.

Завуч школы №30 решила наградить двух учащихся, которые лучше всех сдали информатику.

Программа должна вывести на экран фамилии и имена этих учеников.

Если наибольший балл набрало больше двух человек — вывести количество таких учеников.

Если наибольший балл набрал один человек, а следующий балл набрало несколько человек — нужно вывести только фамилию и имя лучшего.

Напишите эффективную, в том числе и по используемой памяти, программу(укажите используемую версию языка программирования),которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5 учеников школы №30.На вход программе сначала подается число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:<Фамилия><Имя><Номер школы><Количество баллов><Фамилия> — строка, состоящая не более чем из 30 символов без пробелов,<Имя> — строка, состоящая не более чем из 20 символов.<Номер школы> — число в диапазоне от 1 до 99<Количество баллов> — число в диапазоне от 1 до 100.Эти данные записаны через пробел, то есть в каждой строке ровно 3 пробела.

Формат задания

Развёрнутый ответ: короткого ответа здесь нет — оценивается само рассуждение. Разбор откроется после входа.

Решение по шагам

  1. Как рассуждать

    Решение. 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 шага

  1. then writeln(nmax1); //если лучших многоif…

  2. then writeln(Strmax1); //если один лучший и…

  3. and (nmax2 =1) then //если один лучший и один…

Получить полное решение

Бесплатно · займёт минуту

Другие задачи по теме «Обработка символьных строк»

Эта информация в том же виде была разослана в школы. Завуч школы №30 — решение с объяснением | Lom Ai