UVA-10339 Watching Watches

题目大意:有两个钟表,开始时都指向00:00,但是一个每天慢m秒,另一个每天慢k秒,问两个表再次指向同一时刻时的所指时间。精确到分钟,四舍五入。

题目解析:先求出再次指向同一时间时实际经过的天数,天数d=12*3600/abs(m-k)。然后可求每个表总共慢下来的秒数,余下不再细说,看代码。

注意:求时间和分钟的时侯最好按秒、分、时逐级求,否则易错。

代码如下:

# include<iostream>
# include<cstdio>
# include<cmath>
# include<algorithm>
using namespace std;
int main()
{
    int m,k;
    while(~scanf("%d%d",&m,&k))
    {
        if(m==k){
            printf("%d %d 12:00
",m,k);
            continue;
        }
        int c=fabs(m-k);
        double d=12.0*3600.0/c;
        long long n=d*(24*3600-m);
        n%=43200;
        int mm=n/60;
        n%=60;
        if(n>=30)
            ++mm;
        int hh=mm/60;
        mm%=60;
        if(hh==0)
            hh=12;
        printf("%d %d %02d:%02d
",m,k,hh,mm);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/20143605--pcx/p/4672345.html