© Иванов Дмитрий, МБОУ « Лицей № 2 », г. Нижневартовск
Задача № 3
На городской олимпиаде по информатике участникам было предложено выполнить 3 задания, каждое из которых оценивалось по 25-балльной шкале. Известно, что общее количество участников первого тура олимпиады не превосходит 250 человек. На вход программы подаются сведения о результатах олимпиады. В первой строке вводится количество участников N. Далее следуют N строк, имеющих следующий формат: < Фамилия > < Имя > < Баллы > Здесь < Фамилия > – строка, состоящая не более чем из 20 символов; < Имя > – строка, состоящая не более чем из 15 символов; < Баллы > – строка, содержащая три целых числа, разделенных пробелом, соответствующих баллам, полученным участником за каждое задание первого тура. При этом < Фамилия > и < Имя >, < Имя > и < Баллы > разделены одним пробелом. Примеры входных строк: Петрова Ольга 25 18 16 Калиниченко Иван 14 19 15 Напишите программу, которая будет выводить на экран фамилию и имя участника, набравшего максимальное количество баллов. Если среди остальных участников есть ученики, набравшие такое же количество баллов, то их фамилии и имена также следует вывести. При этом имена и фамилии можно выводить в произвольном порядке.
Решение: program Bally; var a: array [ 1.. 250 ] of string; N, l, max, x, i, b, p: integer; z, k: string; begin max:= 0; readln( N); for i:= 1 to N do readln( a [ i ]); z:= a [ 1 ]; l:= Pos(' ', z); Delete( z, 1, l); l:= Pos(' ', z); Delete( z, 1, l); Val( copy( z, 1, Pos(' ', z)-1), x, l); max:= max + x; Delete( z, 1, Pos(' ', z)); Val( copy( z, 1, Pos(' ', z)-1), x, l); max:= max + x; Delete( z, 1, Pos(' ', z)); Val( z, x, l); max:= max + x; for i:= 2 to N do begin z:= a [ i ]; b:= 0; l:= Pos(' ', z); Delete( z, 1, l); l:= Pos(' ', z); Delete( z, 1, l); Val( copy( z, 1, Pos(' ', z)-1), x, l); b:= b + x; Delete( z, 1, Pos(' ', z)); Val( copy( z, 1, Pos(' ', z)-1), x, l); b:= b + x;
Delete( z, 1, Pos(' ', z)); Val( z, x, l); b:= b + x; if b > max then max:= b; end; for i:= 1 to N do begin z:= a [ i ]; b:= 0; l:= Pos(' ', z); p:= l; Delete( z, 1, l); l:= Pos(' ', z); p:= p + l; Delete( z, 1, l); Val( copy( z, 1, Pos(' ', z)-1), x, l); b:= b + x; Delete( z, 1, Pos(' ', z)); Val( copy( z, 1, Pos(' ', z)-1), x, l); b:= b + x; Delete( z, 1, Pos(' ', z)); Val( z, x, l); b:= b + x; if b = max then begin z:= a [ i ]; delete( z, p, length( z)-p + 1); writeln( z); end; end; end.
май, 2015 г.