题解 UVA579 【Clock Hands】

· · 题解

数学计算题——求角度

若时间为a:b,以0点整开始计算。

分针的角度为b/60*360(化简为:b*6); 时针角度应是a/12*360+b/60*1/12*360(化简为:30a+0.5b)。

夹角便是两者的差的绝对值(abs):((6*b)-(30a+0.5b))

怎么推?

设时为 n ,分为 m

及此时为 nm

大家都知道钟面上一大格 = 30°,一小格 =

时针一小时走一大格,则每分钟走0.5°

分针一分钟走一小格,则每分钟走 6° 秒钟每一分钟走一圈,则每分钟走360°

这道题的大意是:给你一个时间,求在始终上时针与分针的夹角。

解题思路是将时针在盘的位置(0~1)减去分针在盘的位置。乘360。如果大于180取对小于180度的角。

上代码

#include<stdio.h>

int main () {

    double h,m;//因为是浮点数,所以要用double
    double d,dh,dm;
    while (scanf("%lf:%lf",&h,&m)) {
        if (h == 0 && m == 0)
            break;
        dh = h * 30;
        dm = m * 6;
        dh = dh + m * 0.5;
        d = dh - dm;
        if (d < 0)//进行条件语句判断
            d = -d;
        if (d > 180)
            d = 360 - d;
        printf("%.3lf\n",d);//输出时要保留3位小数。
    }
    return 0;
}