编程题:计算时针与分针的角度
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;
}
以上是关于编程题:计算时针与分针的角度的主要内容,如果未能解决你的问题,请参考以下文章