HDU-5705 Clock

题目大意

给定一个时间T,一个度数D,求在T时间之后,时针和分针的角度恰为D,求此时间。

思路

尽量不要算除法,会有精度问题(某些二分除外),将除法转化成乘法问题。每120/11 秒对应 时分针相差一度。然后每次增加120秒,同时将此时刻秒数*11(避免除法导致精度误差),进而继续判断如果此时的度数和目标度数是否相等并且当前时间T和上次时间t是否满足T>t,如果都满足条件,则退出循环。输出答案。注意在输出答案的时候要令答案除11,已得到正确答案。

技巧

fabs()是求浮点数绝对值,abs()是求整数绝对值。
scanf("%d:%d")其中可以输入3:3。
printf("%02d",k)%2d是将数字按宽度为2,采用右对齐方式输出,若数据位数不到2位,则左边补空格。这里是补0。"%02d"可以用"%.2d"替换,效果一样。

代码

#include<cstdio>


int main()
{
    int h,m,s;
    int h_s,m_s,a;
    int cnt=1;
    while(scanf("%d:%d:%d",&h,&m,&s)==3){
        scanf("%d",&a);
        h_s=h*3600+m*60+s;
        h_s*=11;
        a*=11;
        int i,tt=0,ttt=0;
        for(i=120;;i+=120){
            tt+=11;
            if(tt>360*11) ttt=tt%(360*11);
            else ttt=tt;
            if(ttt>180*11) ttt=360*11-ttt;
            if(ttt==a&&i>h_s)break;
        }
        i %= 43200*11;  //43200=120 * 360
        int hh=i/(3600*11);
        int mm=(i-hh*(3600*11))/(60*11);
        int ss=(i-hh*(3600*11)-mm*(60*11))/11;
        hh %= 24;
        printf("Case #%d: %02d:%02d:%02d\n",cnt++,hh,mm,ss);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值