目录
- 问题描述
- 输入
- 输出
- 样例
- 问题解析
问题描述
给定时、分(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
时间: 2024-11-07 22:48:14