熱門文章

2026年4月10日 星期五

ZeroJudge 解題筆記:d095. 00579 - ClockHands

作者:王一哲
日期:2026年4月10日


ZeroJudge 題目連結:d095. 00579 - ClockHands

解題想法


先計算時針與12點的夾角,由於時針每12小時轉360度,1小時轉30度,1分鐘轉0.5度,計算角度前先將小時 h 對 12 取餘數。再計算分針與12點的夾角,分針每60分鐘轉360時,1分鐘轉6度。再將兩個角度相減、取絕對值,如果絕對值大於180度,再將答案改成360度減掉絕對值。

Python 程式碼


使用時間約為 7 ms,記憶體約為 8.2 MB,通過測試。
import sys

result = []
for line in sys.stdin:
    if line.strip() == "0:00": break
    h, m = map(int, line.split(":"))
    a = h%12*30 + m/2
    b = m*6
    c = abs(a-b)
    if c > 180: c = 360 - c
    result.append(f"{c:.3f}\n")
sys.stdout.write("".join(result))


C++ 程式碼


2025年7月27日測試,使用時間約為 2 ms,記憶體約為 88 kB,通過測試。2026年4月6日測試,使用時間約為 0 ms,記憶體約為 1.4 MB,通過測試。
#include <cstdio>
#include <cmath>

int main() {
    int h, m;
    while(scanf("%d:%d", &h, &m) != EOF && (h != 0 || m != 0)) {
        double a = h%12*30.0 + m*0.5, b = m*6.0;
        double c = fabs(a-b);
        if (c > 180.0) c = 360.0 - c;
        printf("%.3lf\n", c);
    }
    return 0;
}


沒有留言:

張貼留言