e-olymp 2364. Часы

Задача

Ослик Иа-Иа и часы

Ослик Иа-Иа и часы

На очередной день рождения ослику Иа-Иа подарили наручные стрелочные часы. Теперь у него появилось новое развлечение — смотреть на бег стрелок. На то, как минутная догоняет часовую, обходит и тут же продолжает бежать за ней. Вот и в этот раз Кенга застала ослика за этим занятием. Она присоединилась к наблюдением и через некоторое время ей стало интересно, сколько уже моментов, когда минутная стрелка обгоняет часовую, видел Иа-Иа. Для этого она спросила у ослика во сколько он начал смотреть на часы, записала это и текущее время и побежала к Сове с этим вопросом. Но Сова оказалось очень занята и поэтому попросила вас помочь. Как известно, за один день часовая стрелка делает два оборота, а минутная целых [latex]24[/latex]. Continue reading

e-olymp 111. Часы

Постановка задачи

Часы с боем пробивают каждый час такое количество ударов, сколько их есть на циферблате с цифрами от 1 до 12, и по одному разу тогда, когда минутная стрелка указывает на цифру 6. Зная начальное и конечное время в рамках одних календарных суток (выраженное в часах и минутах), подсчитать общее количество ударов на этом промежутке времени.

Входные данные:

Начальное и конечное время одних календарных суток в часах [latex](H)[/latex] и минутах [latex](M)[/latex] через пробел [latex](0 \leq H \leq 23, 0 \leq M \leq 59)[/latex].

Выходные данные:

Ответ на задачу — общее количество ударов.

Тесты

Входные данные Выходные данные
Начальное время Конечное время
1 00     00 02     35  18
2 17     23 22     29 45
3 16     57 16     57 0
4 00     00 23     59 180

Решение

Описание решения

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

Действия внутри цикла следует выполнять в следующем порядке:

  1. Увеличение количества ударов на 1 или на ту цифру (число), на которую указывает часовая стрелка
  2. Проверка равенства текущего времени и конечного.
  3. Увеличение времени на 1 минуту (переход на следующий час если текущая минута прошла отметку 59)

Такой порядок не позволит пропустить условие прерывания цикла или удара часов в различных случаях (например, начальное и конечное время равны, начальная минута равна 0 или 30).

В итоге к переменной rings будет прибавляться 1 каждый раз, когда минутная стрелка достигает 30 и число, на которое указывает часовая стрелка, каждый раз, когда минутная стрелка достигает 0 (находим остаток от деления количества часов на 12 за исключением тех случаев, когда часы показывают 12 или 0 часов rings += (h1==0 || h1==12)?12:h1%12;).

Посмотреть решение задания можно на сайте e-olymp.

Посмотреть, как работает программа со входными данными 00 00 23 59 можно на сайте ideone.