Добро пожаловать! Если вы хотите успешно сдать ЕГЭ – то вы попали куда надо. Для полноценной подготовки к экзамену egedb.ru предлагает вам: прохождение тестов ЕГЭ по многим предметам с последующим анализом результатов, прорешивание задач определенного типа или на определенные темы, познакомится с процедурой проведения ЕГЭ и многое другое!
Хотите узнать больше о бланках, предоставляемых на экзамене и потренироваться в их заполнении? Всё просто! Наш сайт предлагает потренироваться на электронных копиях блаков – такие тренировки безусловно принесут свои плоды и помогут не допустить ошибок при заполнении.
Вам нужна статистика вашей подготовки на сайте? Войдите в личный кабинет при помощи своей учетной записи в социальной сети «В Контакте» и получите такую возможность. Или может быть вы хотите помочь развитию сайта? При повышенной активности на сайте вы можете быть повышены до уровня модератора и добавлять свои задания на сайт!


Главная

Тесты

Русский язык
Математика
Информатика
Физика
Биология
География
Обществознание
История

Задачи

Русский язык
Математика
Информатика
Физика
Биология
География
Обществознание
История

Как решить

Полезности

Статьи

Новости

Гостевая

Ссылки

Поиск

Вход

Задание C4 по предмету Информатика (№54)

Информатика 2013 год

Обработка символьных строк

C4

На вход программе подаются сведения о пассажирах, желающих сдать свой багаж в камеру хранения на заранее известное время до полуночи. В первой строке сообщается количество пассажиров N, которое не меньше 3, но не превосходит 1000; во второй строке – количество ячеек в камере хранения М, которое не меньше 10, но не превосходит 1000. Каждая из следующих N строк имеет следующий формат:
<Фамилия> <время сдачи багажа> <время освобождения ячейки>,
где <Фамилия> – строка, состоящая не более чем из 20 непробельных символов; <время сдачи багажа> – через двоеточие два целых числа, соответствующие часам (от 00 до 23 – ровно 2 символа) и минутам (от 00 до 59 – ровно 2 символа); <время освобождения ячейки> имеет тот же формат.
<Фамилия> и <время сдачи багажа>, а также <время сдачи багажа> и <время освобождения ячейки> разделены одним пробелом. Время освобождения больше времени сдачи.
Сведения отсортированы в порядке времени сдачи багажа. Каждому из пассажиров в камере хранения выделяется свободная ячейка с минимальным номером. Если в момент сдачи багажа свободных ячеек нет, то пассажир уходит, не дожидаясь освобождения одной из них.
Требуется написать программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая будет выводить на экран для каждого пассажира номер ячейки, которая ему будет предоставлена (можно сразу после ввода данных очередного пассажира). Если ячейка пассажиру не предоставлена, то его фамилия не печатается.
Пример входных данных:
3
10
Иванов 09:45 12:00
Петров 10:00 11:00
Сидоров 12:00 13:12
Результат работы программы на этих входных данных:
Иванов 1
Петров 2
Сидоров 1
За правильный ответ 4 балл(ов)
Правильный ответ:
Программа верно читает входные данные, сразу запоминая только время окончания хранения багажа в массиве, соответствующем ячейкам камеры хранения. Подходящая ячейка определяется путём последовательного просмотра элементов этого массива до первого свободного или такого, в котором записано время окончания хранения, не превосходящее текущего времени сдачи очередного багажа. В случае удачного выбора ячейки фамилия и номер ячейки распечатываются. Баллы начисляются только за программу, которая решает задачу хотя бы для частного случая. Время можно как переводить в минуты, так и хранить в виде строки, сравнивая затем строки непосредственно. В последнем случае упрощается ввод данных
Пример правильной программы на языке Паскаль:
var p:array[1..1000] of integer; c,c1:char; i,j,N,K:integer; name:string; time1,time2:integer; begin readln(N,K); for i:=1 to K do p[i]:=0; for i:=1 to N do begin name:=''; repeat read(c); name:=name+c until c=' '; {считана фамилия} read(c,c1); {считаны часы первого времени} time1:=60*((ord(c)-ord('0'))*10+ ord(c1)-ord('0')); read(c,c,c1); {пропущено двоеточие, и считаны минуты} time1:=time1+(ord(c)-ord('0'))*10+ord(c1)-ord('0'); read(с,c,c1); {считаны часы второго времени} time2:=60*((ord(c)-ord('0'))*10+ ord(c1)-ord('0')); readln(c,c,c1); {пропущено двоеточие, и считаны минуты} time2:=time2+(ord(c)-ord('0'))*10+ord(c1)-ord('0'); for j:=1 to K do if p[j]<=time1 then begin p[j]:=time2; writeln(name,' ',j); break; end; end; end.
Показать ответ

Ещё задания

Комментарии

Назад