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

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

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

Условие

После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик, какой школы сколько набрал баллов. Эта информация в том же виде была разослана в школы.Завуч школы №30 решила наградить двух учащихся, которые лучше всех сдали информатику.Программа должна вывести на экран фамилии и имена этих учеников.Если наибольший балл набрало больше двух человек — вывести количество таких учеников.Если наибольший балл набрал один человек, а следующий балл набрало несколько человек — нужно вывести только фамилию и имя лучшего.Напишите эффективную, в том числе и по используемой памяти, программу(укажите используемую версию языка программирования),которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5 учеников школы №30.На вход программе сначала подается число учеников, сдававших экзамен. В каждой из следующих N строк находится информация об учениках в формате:<Фамилия><Имя><Номер школы><Количество баллов><Фамилия> — строка, состоящая не более чем из 30 символов без пробелов,<Имя> — строка, состоящая не более чем из 20 символов.<Номер школы> — число в диапазоне от 1 до 99<Количество баллов> — число в диапазоне от 1 до 100.Эти данные записаны через пробел, то есть в каждой строке ровно 3 пробела. Критерии оценивания выполнения задания | Баллы | Программа работает для любых входных данных произвольного размера и находит ответ, не сохраняя входные данные в массиве, размер которого соответствует числу N (количеству запросов). Программа просматривает входные данные один раз. Допускается наличие в тексте программы одной синтаксической ошибки: пропущен или неверно указан знак пунктуации, неверно написано или пропущено зарезервированное слово языка программирования, не описана или неверно описана переменная, применяется операция, недопустимая для соответствующего типа данных (если одна и та же ошибка встречается несколько раз, то это считается за одну ошибку). | 4 | Программа работает верно, но входные данные запоминаются в массиве, размер которого соответствует числу N. Этот массив, возможно, потом сортируется. Допускается наличие от одной до трех синтаксических ошибок. Возможно, в принципиально верно организованном вводе данных есть одна ошибка (например, использование read вместо readln в Паскале или неверное считывание строки в C++). Три балла также выставляется, если в эффективной программе, удовлетворяющей критериям выставления 4 баллов, есть одна ошибка, в результате которой программа работает неверно на некоторых наборах нетипичных входных данных. | 3 | Программа работает в целом верно, эффективно или нет, но в реализации алгоритма содержится до двух ошибок (неверная инициализация счётчиков, допущена ошибка в принципиально верно организованной сортировке или алгоритме поиска минимальных элементов, используется знак “<” вместо “<=”, “or” вместо “and” и тому подобное). Возможно, некорректно организовано считывание входных данных. Допускается наличие от одной до пяти синтаксических ошибок, описанных выше | 2 | Программа, возможно, неверно работает при некоторых входных данных, но по приведённому тексту решения ясно, что экзаменуемый понимает, из каких этапов должно состоять решение задачи. При использовании сортировки она может быть реализована принципиально неверно (например, вместо двух циклов используется один), или допущена принципиальная ошибка в поиске нужных элементов. Всего допускается до 4 различных ошибок в реализации алгоритма, в том числе описанных в критериях присвоения двух баллов. Допускается наличие от одной до семи синтаксических ошибок, описанных выше. | 1 | Задание не выполнено или выполнено неверно. | 0 | Максимальный балл | 4 |

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

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

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

  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. Шаг 2

  2. Шаг 3

  3. Шаг 4

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

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

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

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