码迷,mamicode.com
首页 > 其他好文 > 详细

hdu5387 Clock

时间:2015-08-13 22:19:12      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:hdu   c语言   

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5387


题目大意:给出一个时间,判断时针、分针、秒针三者之间的角度。

思路:直接算出三个指针相对于12时的角度,然后相减。

不过题目中要求以分数形式表现,如果以小数计算的话,就难以再表示分数了。所以做个处理:将三个角度都乘以一个比较大的数。这样做的目的是为了确保在运算的时候是整数,从而避免因为小数运算带来的精度误差。最后以分数形式表示答案的时候,可以算出分子和分母的gcd,然后同除以gcd即可。

感觉方法略麻烦。。。

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<stdlib.h>
using namespace std;
int main()
{
    int T,i,j,k;
    double hh,mm,ss,hd,md,sd;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%lf:%lf:%lf",&hh,&mm,&ss);
        if(hh>=12)hh=hh-12;
        hh=hh*21600;
        mm=mm*21600;
        ss=ss*21600;   //同乘以一个比较大的数。
        sd=ss/60*360;
        md=mm*6+ss*0.1;
        hd=hh*30+mm*0.5+ss/120;   //计算三个角度。
   
        int hm,hs,ms;
        int  x,y,z;
        hm=fabs(hd-md);
        hs=fabs(hd-sd);
        ms=fabs(md-sd);
    
        if(hm>3888000)hm=7776000-hm;
        if(hs>3888000)hs=7776000-hs;
        if(ms>3888000)ms=7776000-ms;
     //对钝角的处理,如果角度差大于180,就处理为小于180度的角。(这里180*21600=3888000)
        x=__gcd((int)hm,21600);
        y=__gcd((int)hs,21600);
        z=__gcd((int)ms,21600);  //计算gcd
        if((int)hm==0)x=0;
        if((int)hs==0)y=0;
        if((int)ms==0)z=0;  //如果有角度为0的,就不需要计算gcd了。
        int f1,f2,f3;
        f1=f2=f3=0;
        if(x==21600)f1=1;
        if(y==21600)f2=1;
        if(z==21600)f3=1;
        if(f1)printf("%d ",(int)hm/21600);
        else if(x!=0)printf("%d/%d ",(int)hm/x,21600/x);
        else printf("0 ");
        if(f2)printf("%d ",(int)hs/21600);
        else if(y!=0) printf("%d/%d ",(int)hs/y,21600/y);
        else printf("0 ");
        if(f3)printf("%d \n",(int)ms/21600);
        else if(z!=0)printf("%d/%d \n",(int)ms/z,21600/z);
        else printf("0 \n");
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

hdu5387 Clock

标签:hdu   c语言   

原文地址:http://blog.csdn.net/aaaaacmer/article/details/47620521

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!