中文題目轉自:Lucky貓的 UVA(ACM)園地
在一般的時鐘上通常有兩根指針:時針、分針。這個題目是告訴你幾點幾分,請你的程式回應時針和分針之間的角度。請注意:所有的角度請回應最小的正角度。例如:9:00是90度,不是 -90度,也不是270度。
INPUT
輸入是一連串的時間,每個時間一行,以下列的格式出現: H:M。
1<= H <= 12 00<= M <=59
如果時間是0:00代表輸入結束了。請注意:H可能是1或2位數,M則總是以2位數出現.。(也就是你在一般電子錶上看到的模式。)
OUTPUT
請輸出對應輸入時間的時針和分針間的最小正角度。此角度應該介於0到180度。每個輸出單獨一行。每個輸出至小數點以下第三位。
Sample Input
12:00
9:00
8:10
0:00
Sample Output
0.000
90.000
175.000
解題方法
這題的關鍵就是要知道每走一格是6度(360/60),分針走一格相當於時針走0.5度(分針走360度等於時針走360/12=30度
因此分針走6度等於時針走30/60=0.5度) ,時針跟分針的角度相減就可以得到答案了,再判斷是不是最小的角度
所遇問題
在時針的角度換算上一開始不太順利,解決換算問題後就AC了
程式碼
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
double minute,hour;
while(scanf("%lf:%lf",&hour,&minute)!=EOF){
if(hour==0 && minute==0) break;
double ans = 0;
ans = hour * 5 * 6;
if(minute!= 0)
ans = ans + (minute*0.5);
if(ans > (minute)*6)
ans = ans - (minute * 6) ;
else
ans = (minute * 6) - ans;
if(ans > 180) ans = 360 - ans;
printf("%.3lf\n",ans);
}
return 0;
}
請先 登入 以發表留言。