hdu5387(模拟)

来源:互联网 发布:雪纺衫淘宝好评 编辑:程序博客网 时间:2024/06/05 06:45

题意:

给出一个时间,hh:mm:ss,hh代表小时,mm代表分钟,ss代表秒,要我们输出时针和分针、时针和秒针、分针和秒针之间的角度,输出两个针之间<=180那个度数,如果不是整数,要用分数表示。


思路:

给出时间后,我们可以统计总共走了多少秒,从而计算角度,这道题比赛的时候是队友打的,直接上代码吧。

注意,在代码中,尽量用乘法代替除法,我们因为这个WA了一次。


代码:

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int main() {    int T;    int hh,mm,ss;    scanf("%d",&T);    while(T--) {        scanf("%d:%d:%d",&hh, &mm, &ss);        int sum = hh * 60 * 60 + mm * 60 + ss;        sum %= (12 * 3600);        int h = sum % (12 * 60 * 60);        int m = sum % (60 * 60);        int x = h - m * 12;        if(x < 0) x = -x;        int y = 120;        int z = __gcd(x,y);        x/=z;y/=z;        if(x > y * 180) {            int xx = 360 * y - x;            int yy = y;            int zz = __gcd(xx, yy);            xx /= zz;            yy /= zz;            x = xx;            y = yy;        }        if(x == 0 || x % y == 0) {            printf("%d ", x/ y);        } else {            printf("%d/%d ",x,y);        }        h = sum % (12 * 60 * 60);        m = sum % 60;        x = h - m * 12 * 60;        if(x < 0) x = -x;        y = 120;        z = __gcd(x,y);        x/=z;y/=z;        if(x > y * 180) {            int xx = 360 * y - x;            int yy = y;            int zz = __gcd(xx, yy);            xx /= zz;            yy /= zz;            x = xx;            y = yy;        }        if(x == 0 || x % y == 0) {            printf("%d ", x/ y);        } else {            printf("%d/%d ",x,y);        }        h = sum % (60 * 60);        m = sum % 60;        x = h - m *  60;        if(x < 0) x = -x;        y = 10;        z = __gcd(x,y);        x/=z;y/=z;        if(x > y * 180) {            int xx = 360 * y - x;            int yy = y;            int zz = __gcd(xx, yy);            xx /= zz;            yy /= zz;            x = xx;            y = yy;        }        if(x == 0 || x % y == 0) {            printf("%d ", x/ y);        } else {            printf("%d/%d ",x,y);        }        puts("");    }}


0 0