Работы учащихся Решение сложных задач по программированию | Page 4

© Иванов Дмитрий , МБОУ « Лицей № 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 г .