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

问题描述

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

转载于:https://www.cnblogs.com/darknessplus/p/10687130.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值