27 задание часть 3
Предисловие
Планомерно подходим к году, когда ЕГЭ только появился. Стоит отметить, что условия значительно изменились с далекого 2011 года, раньше не нужно было соблюдать требование к оптимальности (не было ограничений по быстродействию и используемой памяти). Не терпится перейти к решениям!
Демонстрационный вариант ЕГЭ 2013 г. ИНФОРМАТИКА и ИКТ, 11 класс.
1. На вход программе подаются сведения о пассажирах, желающих сдать свой багаж в камеру хранения на заранее известное время до полуночи. В первой строке сообщается число пассажиров N, которое не меньше 3, но не превосходит 1000; во второй строке – количество ячеек в камере хранения K, которое не меньше 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. Далее будем проверять, если время прибытия какого-либо пассажира больше, чем время освобождения ячейки другим пассажиром, то присваиваем ему номер освободившейся ячейки. Иначе просматриваем цикл, находим последнюю заполненную ячейку, и присваиваем строке этот номер +1. В выводе проверяем, если номер присвоенной ячейки меньше их количества, то выводим.
program numberoflaggageforpassengers;
var
a:array[1..1000, 1..4]of string;
AmountOfPassengers, AmountOfCells, FirstIndex, SecondIndex, ThirdIndex, temporary, maximum:integer;
InputStringWithData, temporaryhelper, temporaryhelper2, temporaryhelper3:string;
begin
writeln('Введите количество пассажиров = ');
readln(AmountOfPassengers);
writeln('Введите количество ячеек в камере хранения = ');
readln(AmountOfCells);
for FirstIndex := 1 to AmountOfPassengers do
begin
writeln('Введите фамилию пассажира, время сдачи багажа и время освобождения ячейки');
readln(InputStringWithData);
a[FirstIndex, 4] := '0';
for SecondIndex := 1 to Length(InputStringWithData) do
if InputStringWithData[SecondIndex] = ' ' then
begin
temporary := SecondIndex;
break;
end;
for ThirdIndex:=1 to temporary-1 do
a[FirstIndex, 1] := a[FirstIndex, 1
Вступайте в нашу телеграмм-группу Инфостарт