中文題目轉自: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;
}
創作者介紹
創作者 mian的部落格 的頭像
mian

mian的部落格

mian 發表在 痞客邦 留言(0) 人氣( 86 )