1. 程式人生 > >hihocoder-1562-Hi的鐘表

hihocoder-1562-Hi的鐘表

main panel -h 6.0 tdi using scan tps class

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的鐘表