СДАМ ГИА: РЕШУ ЕГЭ
Образовательный портал для подготовки к экзаменам
Информатика
≡ информатика
сайты - меню - вход - новости


Задания
Версия для печати и копирования в MS Word
Задания Д19 C4 № 7428

В цветочных лавках продают три вида роз (белые, красные и желтые). В городе N была проведена оценка цены роз. Напишите эффективную по времени работы и по используемой памяти программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет определять для каждого вида роз, сколько лавок продают их дешевле всего.

На вход программе в первой строке подается число данных N о стоимости роз. В каждой из последующих N строк находится информация в следующем формате:

 

<Компания><Улица><Вид><Цена>

 

где <Компания> — строка, состоящая не более, чем из 20 символов без пробелов, <Улица> — строка, состоящая не более, чем из 20 символов без пробелов, <Вид> — символ Б, К или Ж, <Цена> — целое число в диапазоне от 100 до 500, обозначающее стоимость одной розы.

<Компания> и <Улица>, <Улица> и <Вид>, а также <Вид> и <Цена> разделены ровно одним пробелом.

 

Пример входной строки:

ТоргЦвет Садовая Ж 225

 

Программа должна выводить через пробел 3 числа – количество лавок, продающих дешевле всего белые, красные и желтые розы соответственно. Если роза какого-то вида нигде не продается, то следует вывести 0.

 

Пример выходных данных:

7 5 0

Решение.

Будем по очереди обрабатывать строчки. Для этого будем посимвольно «пропускать» названия компаний и улиц, так как они не нужны. После чего считывать вид и цену. Для каждого вида у нас будет ячейка в массиве min и ячейка в массиве cnt, которые показывают, какой на данный момент минимум и сколько их соответственно. Если новая цена меньше предыдущей, то запомним её и поставим cnt равным единице. Если новая цена равна минимальной, то просто увеличим cnt на единицу. Изначально все min проинициализируем 1000, большим значением, которого точно не будет.

Приведём код на языке Pascal:

var n, i, ind, cost : integer;

buf : char;

min, cnt : array[1..3] of integer;

begin

for i := 1 to 3 do

begin

min[i] := 1000;

cnt[i] := 0;

end;

readLn(n);

for i := 1 to n do

begin

while buf <> ' ' do

   read(buf);

read(buf);

while buf <> ' ' do

   read(buf);

read(buf);

if buf = 'Б' then

   ind := 1;

if buf = 'К' then

   ind := 2;

if buf = 'Ж' then

   ind := 3;

readLn(cost);

if cost = min[ind] then

   inc(cnt[ind]);

if cost < min[ind] then

   begin

   min[ind] := cost;

   cnt[ind] := 1;

   end;

end;

writeLn(cnt[1], ' ', cnt[2], ' ', cnt[3]);

end.

Источник: РЕШУ ЕГЭ — Пред­эк­за­ме­на­ци­он­ная ра­бо­та 2014 по информатике.