HDU 5387Clock

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 5387Clock相关的知识,希望对你有一定的参考价值。

Description

Give a time.(hh:mm:ss),you should answer the angle between any two of the minute.hour.second hand 
Notice that the answer must be not more 180 and not less than 0
 

Input

There are $T$$(1\leq T \leq 10^4)$ test cases 
for each case,one line include the time 

$0\leq hh<24$,$0\leq mm<60$,$0\leq ss<60$
 

Output

for each case,output there real number like A/B.(A and B are coprime).if it‘s an integer then just print it.describe the angle between hour and minute,hour and second hand,minute and second hand.
 

Sample Input

4 00:00:00 06:00:00 12:54:55 04:40:00
 

Sample Output

0 0 0 180 180 0 1391/24 1379/24 1/2 100 140 120

Hint

每行输出数据末尾均应带有空格 

题意:求给定时间点的时针、分针、秒针的夹角(分数、角度制)

分析:待续....

#include<stdio.h>
int t,h,m,s,tol,up[4],down[4],g;
int gcd(int a,int b)
{
    return b?gcd(b,a%b):a;
}
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d:%d:%d",&h,&m,&s);
        tol=h*3600+m*60+s;
        up[0]=(11*tol)%(43200);
        down[0]=120;
        up[1]=(719*tol)%(43200);
        down[1]=120;
        up[2]=(59*tol)%(3600);
        down[2]=10;
        for(int i=0; i<3; i++)
        {
            if(up[i]/down[i]>179)up[i]=down[i]*360-up[i];
            g=gcd(up[i],down[i]);
            up[i]/=g;
            down[i]/=g;
            if(down[i]==1)printf("%d ",up[i]>180?360-up[i]:up[i]);
            else printf("%d/%d ",up[i],down[i]);
        }
        printf("\n");
    }
    return 0;
}

以上是关于HDU 5387Clock的主要内容,如果未能解决你的问题,请参考以下文章

HDU 5387 Clock(分数类+模拟)

HDOJ 5387 Clock 水+模拟

hdu1209(Clock)

hdu 1209 Clock

HDU1209:Clock

HDU 5705 Clock(模拟,分类讨论)