Мини-урок · перед практикой

Конец уроков

К длительности уроков добавляем только перемены перед окончанием нужного урока.

Как к ней подойти

Увидите, как целочисленные операции и вычисления с дробями помогают обойтись без лишних шагов.

Коротко о теме

Операции // и % помогают разделить число на целую часть и остаток. Для дробных вычислений следите за точностью и порядком действий: одно и то же число может требовать разного способа обработки.

Ключевая идея · Подсчёт двух видов перемен

До конца n-го урока проходят n−1 перемена. После нечётных уроков коротких перемен n//2, после чётных длинных — (n−1)//2. Переводим итоговое число минут в часы и минуты.

Проверьте перед запуском

  • Перемена после указанного урока в ответ не входит.
  • Сначала идёт короткая перемена.
  • По условию часы и минуты выводятся двумя числами, без обязательного ведущего нуля.

Сравните свой подход

Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.

Ваше принятое решение

Рекомендуемое решение: Подсчёт двух видов перемен

До конца n-го урока проходят n−1 перемена. После нечётных уроков коротких перемен n//2, после чётных длинных — (n−1)//2. Переводим итоговое число минут в часы и минуты.

n = int(input())
short_breaks = n // 2
long_breaks = (n - 1) // 2
total_minutes = 9 * 60 + n * 45 + short_breaks * 5 + long_breaks * 15
print(total_minutes // 60, total_minutes % 60)

Время: O(1) арифметических операций. Память: O(1) числовых переменных.

Другой способ: Пошаговое расписание

Моделируем каждый урок и, если он не последний из нужных, следующую перемену. Такая модель легко переносится на изменяемую длительность занятий.

n = int(input())
time = 9 * 60
for lesson in range(1, n + 1):
    time += 45
    if lesson < n:
        time += 5 if lesson % 2 == 1 else 15
print(time // 60, time % 60)

Время: O(n), при ограничении n≤10 — O(1). Память: O(1) числовых переменных.