Присоединиться

11 класс·высокий уровень

Эффективную, в том числе и по используемой памяти, программу (укажите

Условие

На автозаправочных станциях (АЗ

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

На вход программе сначала подается число данных о стоимости бензина N. В каждой из сле¬дующих N строк находится информация в следующем формате: <Компания> <Улица> <Марка> <Цена> где <Компания> — строка, состоящая не более чем из 20 символов без пробелов, <Улица> — строка, состоящая не более чем из 20 символов без пробелов, <Марка> — одно из чисел — 92, 95 или 98, <Цена> — целое число в диапазоне от 1000 до 3000, обозначающее стоимость одного литра бензина в копейках. <Компания> и <Улица>, <Улица> и <Марка>, а также <Марка> и <цена> разделены ровно одним пробелом. Пример входной строки:СуперБенз Цветочная 92 1950Программа должна выводить через пробел Компанию и Улицу искомой АЗС или их количество, если искомых вариантов несколько. Пример выходных данных:Бензинчик ПерспективнаяВторой вариант выходных данных:4

Формат задания

Развёрнутый ответ: короткого ответа здесь нет — оценивается само рассуждение. Разбор откроется после входа.

Решение по шагам

  1. Как рассуждать

    Решение. Программа читает все входные данные один раз, не запоминая их в массиве, размер которого соответствует числу входных данных N или максимальной цене (3000). Во время чтения данных определяются две минимальных цены и количество АЗС, продающих по 92-й бензин по этим ценам. При печати результата проверяется, что у кого-то цена больше минимальной (вторая по минимальности цена существует), в этом случае искомая (искомые) АЗС — со второй по величине ценой, если это не так, то искомая (искомые) АЗС — все, продающие 92-й бензин. Баллы начисляются только за программу, которая решает задачу хотя бы для одного частного случая (например, когда все АЗС продают бен¬зин по различной цене, и 92-й бензин продают не менее двух АЗ С). Пример правильной и эффективной программы на языке Паскаль:var c: char; i, k, N, b, mini, min2, cntl, cnt2: integer; s,si,s2: string; begin mini:=3001; cntl:=0; readln(N); for i:=l to N do begin read(c) ; si := ' ' ; repeat s:=s+c; read(c);until c=' '; {считана компания} repeat s:=s+c; read(c) ;until c=' '; {улица добавлена к компании}readln(k,b);if k = 92 thenif mini > b thenbeginmin2:=minl; cnt2:=cntl; s2:=sl; minl:=b; cntl:=l; sl:=s end elseif mini = b then cntl:=cntl+l elseif min2 > b thenbeginmin2:=b; cnt2:=l; s2:=s end elseif min2 = b then cnt2:=cnt2+l end;if cnt2>0 thenif cnt2=l then writeln(s2) else writeln(cnt2) else {все АЗС продают 92-й бензин по одной цене} if cntl=l then writeln(sl) else writeln(cntl) ; writeln; end. Пример правильной программы на языке Бейсик:DIM s AS STRINGDIM si AS STRING, s2 AS STRINGmini = 3001 cntl = 0 INPUT nFOR j = 1 TO n LINE INPUT s i = 0 DOi = i + 1c−MID - MID(s, i,

Осталось ещё 4 шага

  1. LOOP WHILE c <> " " DOi = i + 1c = MID (s, i…

  2. LOOP WHILE c 0> " " DOi = i + Iс - MID (s, i…

  3. LOOP WHILE c <> " " m = VAL(MID(S, i +…

  4. ) b = VAL(MID(s, i + 4)) k = i - 1 s =…

Получить полное решение

Бесплатно · займёт минуту

Другие задачи по теме «Обработка символьных строк»

Эффективную, в том числе и по используемой памяти, программу (укажите — решение с объяснением | Lom Ai