Меньший угол равен 7,5°. Минутная стрелка находится на 90° от отметки 12. Часовая движется непрерывно: к 3:15 она прошла 90° за три часа и ещё 7,5° за четверть часа, то есть находится на 97,5°. Разница — 7,5°, а не ноль.
Какой угол между стрелками часов в 3:15?
Почему часовая стрелка в 3:15 уже не стоит точно на трёх и как вычислить меньший угол между стрелками.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Предполагаются обычные аналоговые часы с равномерным движением стрелок и точное время 3:15:00. Нужно найти меньший угол.
- Минутная стрелка проходит 360° за 60 минут, то есть 6° в минуту. Через 15 минут её положение —
15 × 6 = 90°от отметки 12. - Часовая стрелка проходит 30° в час, или 0,5° в минуту. В 3:15 она находится на
3 × 30 + 15 × 0,5 = 97,5°. - Разность положений равна
|97,5 − 90| = 7,5°.
Ошибка с ответом «0°» возникает, если считать, что часовая стрелка весь час неподвижно стоит на цифре 3. На обычных часах она постепенно движется к 4.
Обобщение для часов и минут:
def clock_angle(hours, minutes)
hour_angle = (hours % 12) * 30 + minutes * 0.5
minute_angle = minutes * 6
difference = (hour_angle - minute_angle).abs
[difference, 360 - difference].min
end
p clock_angle(3, 15) # 7.5
p clock_angle(12, 0) # 0.0
p clock_angle(6, 0) # 180.0
Функция предполагает корректные входные значения: целые часы и минуты от 0 до 59. Остаток по модулю 12 учитывает двенадцатичасовой циферблат. Последняя строка выбирает меньший из двух углов; решение использует O(1) времени и памяти.