2015多校第8场 HDU 5387 Clock 模拟,计算时钟指针角度

本文介绍了一种解决钟表上时针、分针及秒针之间夹角问题的方法,并提供了一个具体的C++实现示例。通过将角度放大120倍进行计算,最后输出最简分数形式。

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

题意:给你一个格式为hh:mm:ss的时间,问改时间时针与分针、时针与秒针、分针与秒针之间夹角的度数是多少,若夹角度数不是整数,则输出最简分数形式A/B,即A与B互质。

解法:该题的思路很简单,只需先将时针、分针、秒针代表的时间转换成距离0刻度的角度,然后再求两者之间夹角的度数就会方便许多,需要注意,每秒钟,秒针对分针的贡献是0.1°,秒针对时针的贡献是(1/120)°;每分钟,分针对时针的贡献是0.5°。为了使得计算角度时均为整数,本人特地将角度放大了120倍,最后反正是要化成最简分数形式的,故再除以120即可。


#include <bits/stdc++.h>
using namespace std;
int T,h,m,s,a,b,c;
int main()
{
    scanf("%d", &T);
    while(T--){
        scanf("%d:%d:%d", &h,&m,&s);
        h%=12;
        h = h*3600+m*60+s;
        m = m*720+s*12;
        s*=720;
        a = abs(h-m);
        b = abs(h-s);
        c = abs(m-s);
        if(a>21600) a = 43200-a;
        if(b>21600) b = 43200-b;
        if(c>21600) c = 43200-c;
        if(a%120){
            printf("%d/%d ", a/__gcd(a,120), 120/__gcd(a,120));
        }
        else{
            printf("%d ", a/120);
        }

        if(b%120){
            printf("%d/%d ", b/__gcd(b,120), 120/__gcd(b,120));
        }
        else{
            printf("%d ", b/120);
        }

        if(c%120){
            printf("%d/%d ", c/__gcd(c,120), 120/__gcd(c,120));
        }
        else{
            printf("%d ", c/120);
        }
        printf("\n");
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值