Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
А это подборки моих материалов на канале
Пример ЕГЭ-задачи по программированию
Очередная задача. Как всегда, не слишком сложная. Не слишком сложный алгоритм и не сложные технологические приёмы.
Процитирую условие задачи
На вход программе подаются сведения о ячейках автоматической камеры хранения багажа. В первой строке задана текущая дата: через точку два целых числа, соответствующие дню.
(от 01 до 31 – ровно 2 символа) и месяцу (от 01 до 12 – ровно 2 символа). Во второй строке сообщается количество занятых ячеек N, которое не меньше 3, но не превосходит 1000. Каждая.
из следующих N строк имеет следующий формат: <номер ячейки> <дата сдачи багажа>, где <номер ячейки> – четырехзначное число, <дата сдачи багажа> – через точку два целых числа, соответствующие дню (от 01 до 31 – ровно 2 символа) и месяцу (от 01 до 12 – ровно 2 символа). Номер ячейки и дата сдачи багажа разделены одним пробелом.
Время хранения багажа не более трёх суток. Требуется написать эффективную программу которая выведет номера ячеек, в которых багаж хранится именно трое суток, т.е. разница между датой сдачи багажа и текущей датой составляет три дня. Номера ячеек следует выводить в порядке возрастания.
Багаж мог сдаваться не ранее чем за три дня до текущей даты. Если дата сдачи багажа больше, чем текущая, то это означает, что багаж был сдан в прошлом году (такая ситуация возможна,.
только если текущий месяц – январь, а багаж был сдан в декабре). Количество дней в каждом из месяцев года следующее: январь – 31, февраль – 28, март – 31, апрель – 30, май – 31, июнь – 30, июль – 31, август – 31, сентябрь – 30, октябрь – 31, ноябрь – 30, декабрь – 31..
Все входные данные корректны.
Пример входных данных:
03.01
3
2000 01.01
1001 31.12
1007 02.01
Результат работы программы для этого примера:
1001
Условие длинное. Иногда таким приёмом авторы преследуют цель тренировать умение внимательно читать и понимать тексты. И, наверное, это правильно для школьников.
Что здесь важно?
1. Дата представлена строкой: день и месяц, отделённые точкой. С такой датой работать не удобно. Лучше разделить её на два числа: день и месяц.
2. Чтобы проверить, не прошло ли три дня с даты сдачи багажа, нужно добавить 3 дня к дате и сравнить полученную дату с текущей датой. Для такого сложения лучше написать функцию.
3. Добавлять лучше по одному дню. При этом каждый раз проверять не переходим ли мы в следующий месяц или в следующий год. В этом случае не важно сколько мы добавляем дней, поэтому напишем функцию добавления к дате n дней.
Ниже представлена программа, решающая данную задачу. Если вам не известен метод split() посмотрите здесь.
Вот и всё. В данной задаче я не увидел возможность решить её каким-то оригинальным способом. Всё очень стандартно.
Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.