1344. Angle Between Hands of a Clock

練習日期:2026-02-04

難度:Medium

類型:Math

📘 題目敘述

給你兩個數字 hourminutes

請你回傳「時針」與「分針」之間的最小角度(以度數表示)。

答案的相對誤差需小於 10^-5 才會被接受。

條件限制

  • 1 <= hour <= 12
  • 0 <= minutes <= 59

🧠 解題思路

我把時針角度跟分針角度都換成「相對 12 點方向的度數」,最後取兩者差的較小夾角。

  1. 分針角度
    • 分針一圈 360 度,共 60 分鐘
    • 每分鐘走 360 / 60 = 6
    • 所以分針角度 m = minutes * 6
  2. 時針角度
    • 時針一圈 360 度,共 12 小時
    • 每小時走 360 / 12 = 30
    • 所以先有 30 * hour
    • 但時針會隨分鐘前進:每分鐘走 30 / 60 = 0.5
    • 所以再加上 minutes * 0.5 = minutes / 2
    • 時針角度 h = 30 * hour + minutes / 2
  3. 最小角度
    • 兩者差值 d = abs(h - m)
    • 另一個方向的角度是 360 - d
    • min(d, 360 - d) 就是最小角度

所有變數

  • hour:輸入的小時(1 到 12)
  • minutes:輸入的分鐘(0 到 59)
  • h:時針相對 12 點方向的角度(度數)
  • m:分針相對 12 點方向的角度(度數)

🪜 主要流程步驟

1. 把分針換成角度

  • m = minutes * 6

2. 把時針換成角度(包含分鐘帶來的偏移)

  • h = 30 * hour + (double)minutes / 2

3. 計算兩針的差值並取最小夾角

  • d = abs(h - m)
  • 回傳 min(d, 360 - d)

💻 程式碼實作

class Solution {
public:
    double angleClock(int hour, int minutes) {
        double h, m;
        m = minutes * 6;
        h = 30 * hour + ((double)minutes / 2);
        return min(abs(h - m), 360 - abs(h - m));
    }
};

https://leetcode.com/problems/angle-between-hands-of-a-clock/

作者: scottnick
撰寫日期: 2026-02-04
類別:
原文連結: https://scottnick.github.io/cpp-notes/all%20problems/1344-angle-between-hands-of-a-clock.html