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

Posted darknessplus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程题:计算时针与分针的角度相关的知识,希望对你有一定的参考价值。

问题描述

给定时、分(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;
}

以上是关于编程题:计算时针与分针的角度的主要内容,如果未能解决你的问题,请参考以下文章

查找具有给定时钟分针和时针角度的所有时间

第三周总结

2019春第三次课程设计实验报告

2019春第3次课程设计实验安排

2019春第三次课程设计实验报告

hdu5387(2015多校8)--Clock(模拟)