hihocoder-1562-Hi的钟表

Posted zhang--yd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hihocoder-1562-Hi的钟表相关的知识,希望对你有一定的参考价值。

hihocoder-1562-Hi的钟表

1562 : ?Hi的钟表

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

?Hi喜欢各种?度。?天,他注意到了钟表上的?度,于是他想考考他的好朋友?Ho:对于?个24?时制的时刻,在 t 秒之后,对应在钟表上时针与分针的夹?是多少。为保证答案的唯?性,只需考虑不超过180°的?。你能帮助?Ho解决这个问题吗?  

例如,下图可表?15点30分0秒经过0秒后的时间,其对应的夹?为75°和285°,在这个问题中我们只考虑不超过180°的?,所以此时的夹?为75°。

技术分享

输入

输?包含多组测试数据。

第??为测试数据的组数T(1 ≤ T ≤ 1000)  

对于每组数据:  

第??包含三个整数hms,表?给定时刻的时、分、秒(0 ≤ h ≤ 23,0 ≤ m ≤ 59,0 ≤ s ≤ 59)  

第??包含?个整数t,表?经过的秒数(0 ≤ t ≤ 1000000000)

输出

对于每组数据,输出时针与分针的夹角。四舍五?保留?数点后四位。

样例输入
3
15 30 0
0
14 30 0
3600
15 30 0
3600
样例输出
75.0000
75.0000
45.0000

 

 

#include <cstdio>  
#include <cstring> 

#include <cmath>

#include <iostream>  
using namespace std; 

double ComputeAngle(int h, int m, int s){
	double m_angle = m * 360.0 / 60.0 + (s/60.0)*6.0;  
	while(m_angle > 360.0){
		m_angle -= 360.0; 
	}
	
	double h_angle = h * 360.0 / 12.0 + (m_angle / 360.0)*30.0; 
	while(h_angle > 360.0){
		h_angle -= 360.0; 
	}

	double ans = max(m_angle, h_angle) - min(m_angle, h_angle); 
	ans = min(360.0 - ans, ans);  
	return ans; 
}

int main(){

	int T, t, s, h, m;
	double ans;  
	scanf("%d", &T); 
	while(T--){
		scanf("%d %d %d", &h, &m, &s); 
		scanf("%d", &t); 

		h += t / 3600; 
		h %= 12;

		t = t % 3600;  

		m += t / 60; 
		if(m >= 60){
			m %= 60; 
			h = (h + 1)% 12; 
		} 
		t = t%60; 

		s += t; 
		if(s >= 60){
			s %= 60; 
			m = m + 1; 
			if(m >= 60){
				m %= 60; 
				h = (h + 1)%12; 
			}
		}

		ans = ComputeAngle(h, m, s); 

		printf("%.4lf\n", ans ); 
	}
	return 0; 
} 

  

 

以上是关于hihocoder-1562-Hi的钟表的主要内容,如果未能解决你的问题,请参考以下文章

利用构造函数 创建钟表

WPF钟表效果实现

动态小人钟表

简单的JS钟表计时

使用 canvas+JS绘制钟表

canvas 画一个钟表