Официальный сайт aksakal 24/7/365

Вы не зарегистрированы

Авторизация



На: Разбор задач С4

Елена Евгеньевна Лапшева
Фото пользователя Елена Евгеньевна Лапшева
На сайте с: 17/12/2008
Пользователь в офф-лайн. Последнее посещение 8 лет 45 недель назад.
На: Разбор задач С4

Очередная задача из ЕГЭ-2008.

На вход программе подаются сведения обо всех учениках некоторой средней школы. В первой строке сообщается количество учеников N, каждая из следующих N строк имеет следующий формат: <Фамилия> <Имя> <класс>, где <Фамилия> - строка, состоящая не более чем из 20 символов, <Имя> - строка, состоящая не более чем из 15 символов, <класс> - год обучения (от 1 до 12) и латинская заглавная буква (от «A» до «Z») без пробела. <Фамилия> и <Имя>, а также <Имя> и <класс> разделены одним пробелом. Пример входной строки:
Иванов Петр 10А
В рамках одной параллели классы нумеруются буквами подряд, начиная с «А». В некоторых параллелях классов может не быть совсем.
Требуется написать как можно более эффективную программу, которая будет выводить на экран информацию о параллелях (годе обучения) с наибольшем количеством классов. Программа должна выводить на экран в первой строке количество классов в искомых параллелях, а во второй строке – номера этих параллелей в порядке возрастания через пробел. Например:
4
1  3  7 11

Решение на Паскале

var
a: array [1..12] of char;
i, j, n, m, err: integer; k: char;
s, t: string;
begin
assign (input, 'input.txt');
assign (output, 'output.txt');
reset (input);
rewrite (output);
readln (n);
for i:=1 to 12 do a[i]:=' '; {В этом массиве мы будем хранить последнюю букву для каждой параллели}
for i:=1 to n do begin
readln (s);
j:=length (s); {Так как номер параллели и буква - это последние символы, то нам не интересно все остальное}
k:=s[j]; {Это буква класса}
j:=j-1;
t:='';
while s[j]<>' '
do begin
t:=s[j]+t;
j:=j-1;
end;
val (t, m, err); {Номер параллели}
if a[m] < k then a[m]:=k; {Если встретилась более "старшая" буква, записываем ее в массив в элемент, соответствующий параллели}
end;
k:=a[1]; {Ищем "максимальную" букву}
for i:=1 to 12 do
if a[i] > k
then
k:=a[i];
m:=ord(k)-ord('A')+1; {Находим количество классов в самой длинной параллели}
writeln (m);
for i:=1 to 12 do
if a[i]=k then write (i:3); {Выводим номера этих параллелей}
close (input);
close (output);
end.
 

Лапшева Елена, Саратов

Смотреть kino онлайн


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн