HDOJ 5702 Clock

本文介绍了一个关于时针与分针角度差的计算问题,并提供了一种通过模拟的方法来解决该问题的具体实现。文章详细分析了时针与分针的速度差,并通过具体的C++代码展示了如何找到两个指针之间的特定角度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

这是一个时针分针的追击问题,这种问题一般来说都比较烦,由于我们这题中只考虑到最近的点,所以我们一组数据如果暴力的话完全是可取的。我们先来分析时针的速度是每120秒转1度,而分针则是每10秒转1度,所以我们时针和分针的差距则是每120秒差11度,那么每过120/11秒就差1度,我们要找的就是a/(120/11) = 11*a/120;因为如果我们直接计算/11的话肯定会出现精度问题的,所以我们就先*11,最后再除下来。我们先计算到现在时刻所需要的时间now,我再从00:00:00开始模拟,注意,因为题上并没有说明谁在前面,所以都有可能发生,显然相距一个特定的角度肯定是时针和分针交替在前面的,我们一直模拟到超过now为止就好。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
	int h,m,s,Max=12*3600*11,t=1;
	while(scanf("%d:%d:%d",&h,&m,&s) !=EOF)
	{
		int now = 11*(h*3600+m*60+s);
		int a;
		scanf("%d",&a);
		int da = 360-2*a;
		int cnt = a*120, flag = 1;
		while(cnt <= now)
		{
			if(flag)
			{
				flag = 0;
				cnt += da*120;
			}
			else
			{
				flag = 1;
				cnt += 2*a*120;
			}
		}
		if(cnt >= Max) cnt -= Max;
		h = cnt/(3600*11);
		cnt %= 3600*11;
		m = cnt/(60*11);
		cnt %= 60*11;
		s = cnt/11;
		printf("Case #%d: %02d:%02d:%02d\n",t++,h,m,s);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值