找到时钟分针和时针给定角度的所有计时

Find all timings with given angle of clock minute and hour hands

本文关键字:时钟      更新时间:2023-10-16

给定时针和分针之间夹角的绝对值。我们需要找到从午夜(含)到中午(不含)满足给定角度的所有有效的时间值(以小时和分钟为单位,都是非负整数)

值得注意的是,如果时钟指针之间的角度与所描述的角度相差小于1/120度,则认为时间值有效。此外,分针的运动也会影响时针。也就是说,每分钟,它移动了两个连续小时标记之间角距离的1/60。

那么如何以好的方式解决这个问题呢?我写了一段代码,里面有很多if和else。所以我想知道是否有一种干净的方法可以找到所有的人。

示例:如果A=30,则可以是:

01:00
11:00

我将在伪代码中尝试一个想法

for minuteHand in [0,59]:
    minuteAngle=angle(minuteHand) // gives the angle respect to the 0
    hourAngle1 = minuteAngle+A //Should be modified to account for the precision
    hourAngle2 = minuteAngle-A
    if isValidTime(minuteAngle,hourAngle1): // check if the two hands express a valid time at this angle
        found a valid time
    if isValidTime(minuteAngle,hourAngle2):
        found a valid time

Codechef当前竞争的问题

https://www.codechef.com/OCT15/problems/TIMEASR

我真的不明白你的问题是什么。"如何解决这个问题?"给出一个简短的答案有点模糊。然而,我要做的第一件事是将所有值转换为相同的单位。30度对应1/12个圆,即在一分钟内一只手移动6度(1/60个完整圈),另一只手移动1/2度(一个完整小时30度)。所以你基本上要解决

abs( (t * 6) - (t*1/2) ) == 30 + n*360

其中n = 0,1,2,....模部分使得直接解有点繁琐,但是你可以简单地对t的任何值运行一个循环来找到解。希望这对你有所帮助。如果没有,也许您应该考虑显示一些代码....

这个问题现在不应该回答,因为它来自codechef主持的一个长期竞赛。所以,对于像我们这样想自己解决这个问题的发烧友来说,这是在破坏这个问题。