Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
24
Добавлен:
19.05.2015
Размер:
719.36 Кб
Скачать

Var Info: array[1..100] of record

name: string;

count: integer;

end;

I, k, p, n, c: integer;

s: string;

exist: boolean;

begin

readln(N);

for i:=1 to N do begin

readln(s);

p := Pos(' ', s);

s := Copy(s,1,p-1);

c := 1;

for k:=1 to i-1 do

if s = Info[k].name then

c := c + 1;

Info[i].name := s;

Info[i].count := c;

end;

for i:=1 to N do begin

write(Info[i].name);

if Info[i].count > 1 then write(Info[i].count);

writeln;

end;

end.

  1. Это упрощенный вариант второй задачи, подробно разобранной в основной части. Отличия: нужно найти максимум вместо минимума, и только один, а не три.

const LIM = 250;

Var Info: array[1..Lim] of record

name: string;

sum: integer;

end;

I, k, n, mark, max: integer;

c: char;

begin

readln(N);

{ ввод исходных данных }

for i:=1 to N do begin

Info[i].name := '';

for k:=1 to 2 do

repeat

read(c);

Info[i].name := Info[i].name + c;

until c = ' ';

Info[i].sum := 0;

for k:=1 to 3 do begin

read(mark);

Info[i].sum := Info[i].sum + mark;

end;

readln;

end;

{ поиск максимума}

max := Info[1].sum;

for i:=2 to N do

if Info[i].sum > max then

max := Info[i].sum;

{ вывод результата }

for i:=1 to N do

if Info[i].sum = max then

writeln(Info[i].name);

end.

Возможен другой вариант решения (А.С. Абрамов, лицей при РГСУ, г. Воронеж), основанный на следующей идее: в массив записываются фамилии только тех участников, которые имеют суммарный балл, равный максимальному на данный момент; если максимум меняется, возвращаемся к 1-му элементу массива и следующую «цепочку» максимумов записываем поверх предыдущей. Обработка данных выполняется сразу при вводе, отдельный поиск максимума не требуется.

Целая переменная count будет обозначать количество найденных участников с максимальным баллом. В переменной max будем хранить максимальный (на данный момент) результат, а в переменной ball накапливать сумму баллов очередного участника. Тогда алгоритм обработки выглядит так (переменная s содержит фамилию и имя):

if ball > max then begin { новый максимум }

count := 1;

max := ball;

names[1] := s;

end

else

if ball = max then begin { еще один участник в списке }

count := count + 1;

names[count] := s;

end;

Вот полная программа:

const LIM = 250;

Var names: array[1..Lim] of string;

I, k, n, ball, mark, max, count: integer;

s: string;

c: char;

begin

readln(N); { ввод количества участников }

max := 0; count:=0;

{ ввод данных в цикле }

for i:=1 to N do begin

s := '';

for k:=1 to 2 do { читаем фамилию и имя }

repeat

read(c);

s := s + c;

until c = ' ';

{ считываем и суммируем баллы }

ball := 0;

for k:=1 to 3 do begin

read(mark);

ball := ball + mark;

end;

readln;

{ ищем участников с максимальлным баллом }

if ball > max then begin

count := 1;

max := ball;

names[1] := s;

end

else

if ball = max then begin

count := count + 1;

names[count] := s;

end;

end;

{ вывод результата }

for i:=1 to count do

writeln(names[i]);

end.

  1. Это вариант второй задачи, подробно разобранной в основной части. Отличия: нужно найти максимум вместо минимума, сумма складывается из четырех оценок.

const LIM = 100;

Соседние файлы в папке ЕГЗ_2012_Поляков_май