题目链接: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; }