编程题:计算时针与分针的角度

问题描述

给定时、分(24小时制),输出对应的时间在表盘上时针和分针的角度,即从时针开始顺时针第一次到达分针构成的角度。

输入

两个整数,时H,分M

输出

时针和分针构成的角度,该角度的定义见问题描述部分

样例

输入:

0 10
9 27
14 35
23 59

输出:

55
238.5
132.5
354.5

问题解析

题目描述虽然是 24 小时制,但是 23:59 和 11:59 的时针和分针在表盘上的位置是相同的,因此可以(通过取余操作)把问题简化成12小时制。

下面以 9:10 为例描述计算方式:
每经过1小时,时针转动的角度是 360° / 12h = 30°/h;
每经过1分钟,分针转动的角度是 360° / 60min = 6°/min;
那么,每经过1分钟,时针转动的角度是 30° / 60min = 0.5°/min;

以0点的位置为参考点,顺时针来看,分针转过的角度 = M * 6 ,时针转过的角度 = H * 30 + M * 0.5 。

要求时针顺时针到达分针的角度,我们可以分两步,求出时针顺时针到0点的角度A,再求0点顺时针到分针的角度B,则时针顺时针到分针的角度 = (A + B)% 360。

A和B根据上面的讨论很容易就计算出来。

代码:

#include <bits/stdc++.h>

using namespace std;

float angle(int H,int M)
{
    H=H%12;
    M=M%60;
    float Hour2Zero=360-(30*H+0.5*M);
    float Zero2Min= 6*M;
    float ans=Hour2Zero+Zero2Min;

    return ans>=360 ? ans-360:ans;
}

int main()
{
    int H,M;
    while(cin>>H>>M)
    {
        cout<<angle(H,M)<<endl;
    }
    return 0;
}

posted @ 2019-04-11 00:09  darknessplus  阅读(910)  评论(0编辑  收藏  举报