日期: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;
}
沒有留言:
張貼留言