Найдите угол между часом и минутными стрелками в аналоговых часах

Мне недавно дали этот вопрос об интервью:

Учитывая 12-часовые аналоговые часы, вычислите в градусе меньший угол между часом и минутными стрелками. Будьте так точны, как Вы можете.

Я задаюсь вопросом, что является самым простым, большая часть читаемого, самого точного алгоритма. Решение на любом языке приветствуется (но действительно объясните это немного, если Вы думаете, что это необходимо).

33
задан udit043 3 October 2015 в 09:20
поделиться

2 ответа

Оказывается, в Википедии есть лучший ответ:

// h = 1..12, m = 0..59
static double angle(int h, int m) {
    double hAngle = 0.5D * (h * 60 + m);
    double mAngle = 6 * m;
    double angle = Math.abs(hAngle - mAngle);
    angle = Math.min(angle, 360 - angle);
    return angle;
}

По сути:

  • Часовая стрелка движется со скоростью 0,5 градусов в минуту
  • Минутная стрелка движется со скоростью 6 градусов в минуту

Проблема решена.


И точность не волнует, потому что дробная часть равна либо .0, либо .5, а в диапазоне 0...360 все эти значения точно представимы в double.

43
ответ дан 27 November 2019 в 18:23
поделиться

Не знаю, правильно ли это, .что-то вроде этого?

//m*360/60 - (h*360/24)+(m*360/(24*60)) ->
t = abs(25*m - 60*h)/4
t = min(t,360-t)
-3
ответ дан 27 November 2019 в 18:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: