题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5387
题意:给你一个格式为hh:mm:ss的时间,问改时间时针与分针、时针与秒针、分针与秒针之间夹角的度数是多少,若夹角度数不是整数,则输出最简分数形式A/B,即A与B互质。
解法:该题的思路很简单,只需先将时针、分针、秒针代表的时间转换成距离0刻度的角度,然后再求两者之间夹角的度数就会方便许多,需要注意,每秒钟,秒针对分针的贡献是0.1°,秒针对时针的贡献是(1/120)°;每分钟,分针对时针的贡献是0.5°。为了使得计算角度时均为整数,本人特地将角度放大了120倍,最后反正是要化成最简分数形式的,故再除以120即可。
#include <bits/stdc++.h>
using namespace std;
int T,h,m,s,a,b,c;
int main()
{
scanf("%d", &T);
while(T--){
scanf("%d:%d:%d", &h,&m,&s);
h%=12;
h = h*3600+m*60+s;
m = m*720+s*12;
s*=720;
a = abs(h-m);
b = abs(h-s);
c = abs(m-s);
if(a>21600) a = 43200-a;
if(b>21600) b = 43200-b;
if(c>21600) c = 43200-c;
if(a%120){
printf("%d/%d ", a/__gcd(a,120), 120/__gcd(a,120));
}
else{
printf("%d ", a/120);
}
if(b%120){
printf("%d/%d ", b/__gcd(b,120), 120/__gcd(b,120));
}
else{
printf("%d ", b/120);
}
if(c%120){
printf("%d/%d ", c/__gcd(c,120), 120/__gcd(c,120));
}
else{
printf("%d ", c/120);
}
printf("\n");
}
return 0;
}