Том, какой ученик какой школы сколько баллов набрал.Районный методист
Условие
После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик какой школы сколько баллов набрал.Районный методист решила выяснить фамилии учеников, которые набрали наибольший балл, по каждой школе в отдельности, но только если из школы информатику сдавало не меньше 3 человек. Если в школе информатику сдавало меньше 3 человек, информацию по этой школе выводить не нужно.Программа должна вывести на экран информацию в виде: <Номер школы> <Фамилия ученика>в отдельной строке для каждой школы.Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая должна вывести на экран требуемую информацию. Известно, что информатику сдавало больше 5-ти учеников района. Также известно, что в районе школы с некоторыми номерами не существуют.На вход программе сначала подаётся число учеников, сда-вавших экзамен. В каждой из следующих N строк находится информация об учениках в формате:<Фамилия> <Имя> <Номер школы> <Количество баллов> где <Фамилия> — строка, состоящая не более чем из 30 символов без пробелов, <Имя> — строка, состоящая не более чем из 20 символов без пробелов, <Номер школы> — целое число в диапазоне от 1 до 99, <Количество баллов> — целое число в диапазоне от 0 до 100. Эти данные записаны через пробел, причём ровно один между каждой парой (то есть всего по три пробела в каждой строке). Пример входной строки: Иванов Иван 50 87 Пример выходных данных: 5 Иванов50 Петров74 Сидоров Критерии оценивания выполнения задания | Баллы | Программа работает для любых входных данных произвольного размера и находит ответ, не сохраняя входные данные в массиве, размер которого соответствует числу N (количеству запросов). Программа просматривает входные данные один раз. Допускается наличие в тексте программы одной синтаксической ошибки: пропущен или неверно указан знак пунктуации, неверно написано или пропущено зарезервированное слово языка программирования, не описана или неверно описана переменная, применяется операция, недопустимая для соответствующего типа данных (если одна и та же ошибка встречается несколько раз, то это считается за одну ошибку). | 4 | Программа работает верно, но входные данные запоминаются в массиве, размер которого соответствует числу N. Этот массив, возможно, потом сортируется. Допускается наличие от одной до трех синтаксических ошибок. Возможно, в принципиально верно организованном вводе данных есть одна ошибка (например, использование read вместо readln в Паскале или неверное считывание строки в C++). Три балла также выставляется, если в эффективной программе, удовлетворяющей критериям выставления 4 баллов, есть одна ошибка, в результате которой программа работает неверно на некоторых наборах нетипичных входных данных. | 3 | Программа работает в целом верно, эффективно или нет, но в реализации алгоритма содержится до двух ошибок (неверная инициализация счётчиков, допущена ошибка в принципиально верно организованной сортировке или алгоритме поиска минимальных элементов, используется знак “<” вместо “<=”, “or” вместо “and” и тому подобное). Возможно, некорректно организовано считывание входных данных. Допускается наличие от одной до пяти синтаксических ошибок, описанных выше | 2 | Программа, возможно, неверно работает при некоторых входных данных, но по приведённому тексту решения ясно, что экзаменуемый понимает, из каких этапов должно состоять решение задачи. При использовании сортировки она может быть реализована принципиально неверно (например, вместо двух циклов используется один), или допущена принципиальная ошибка в поиске нужных элементов. Всего допускается до 4 различных ошибок в реализации алгоритма, в том числе описанных в критериях присвоения двух баллов. Допускается наличие от одной до семи синтаксических ошибок, описанных выше. | 1 | Задание не выполнено или выполнено неверно. | 0 | Максимальный балл | 4 |
Формат задания
Решение по шагам
Как рассуждать
Решение. ПАСКАЛЬvar num,bal: array[1..99] of integer;name: array[1..99] of string[52];s:string[52]; ch:char;i,N,sh,ball:integer; beginfor i: =1 to 99 do {обнуляем массивы} beginnum[i]:=0; bal[i]:=-1 end;readln(N); {считали количество строк} for i:=1 to N do {перебираем все входные строки} begin s : =' ';repeatread(ch); s : =s+ch;until ch=' ';{считана фамилия и записана в переменную s}repeatread(ch) until ch= ' '; {считано имя} readln(sh,ball); {считали номер школы и балл ученика}if ball > bal[sh] then {если текущий балл лучше} beginbal[sh]:=ball; {запоминаем текущий балл по школе}name[sh]:=s; {и фамилию ученика}end;num[sh]:=num[sh]+1; {считаем количество учеников из школы}end;for i:=1 to 99 doif num[i] > = 3 then {выбираем только школы,из которых сдавало больше трех учеников} writeln{i,' ',name[i]);end.
Осталось ещё 1 шаг
Полный разбор с проверкой ответа
Бесплатно · займёт минуту