HDU5387 Clock 时钟模拟

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


你可能感兴趣的:(HDU5387 Clock 时钟模拟)