题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5387
题目大意:给出一个24小时制的时间,分别找出时针-分针,时针-秒针,分针-秒针之间的角度。
分析:在纸上算一下就行了。对于这三个角度,我们可以选12时作为参考点,然后分别找出时针,分针,秒针和参考点之间的角度,然后用这个角度相减就得到了两根指针之间的相对角度了。
实现代码如下:
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
int main()
{
int t;
cin>>t;
int h,m,s;
while(t--)
{
scanf("%d:%d:%d",&h,&m,&s);
h=h%12;
int hm=fabs(3600*h-660*m-11*s),hm1=120;
if(hm>21600) hm=43200-hm;
int hs=fabs(3600*h+60*m-719*s),hs1=120;
if(hs>21600) hs=43200-hs;
int ms=fabs(60*m-59*s),ms1=10;
if(ms>1800) ms=3600-ms;
//printf("%d %d %d\n",hm,hs,ms);
int a1=gcd(hm,hm1);
int a2=gcd(hs,hs1);
int a3=gcd(ms,ms1);
if(a1>1)
{
hm/=a1;
hm1/=a1;
}
if(a2>1)
{
hs/=a2;
hs1/=a2;
}
if(a3>1)
{
ms/=a3;
ms1/=a3;
}
if(hm1==1) printf("%d ",hm);
else printf("%d/%d ",hm,hm1);
if(hs1==1) printf("%d ",hs);
else printf("%d/%d ",hs,hs1);
if(ms1==1) printf("%d \n",ms);
else printf("%d/%d \n",ms,ms1);
}
return 0;
}