查找具有给定时钟分针和时针角度的所有时间
Posted
技术标签:
【中文标题】查找具有给定时钟分针和时针角度的所有时间【英文标题】:Find all timings with given angle of clock minute and hour hands 【发布时间】:2015-10-02 11:39:28 【问题描述】:给定时针和分针之间角度的绝对值。 我们需要找到满足给定角度的从午夜(包括)到中午(不包括)的所有有效时间值(以小时和分钟为单位,均为非负整数)。
请注意,如果时钟指针之间的角度与所描述的给定角度相差小于 1/120 度,则该时间值被认为是有效的。 此外,分针的移动也会影响时针。也就是说,它每分钟移动两个连续小时标记之间角距离的 1/60。
那么如何以好的方式解决这个问题。我用大量的 if 和 else 写了一段代码。所以只是想知道是否有干净的方法可以找到所有这些。
例子:如果 A=30 那么它可以是:
01:00
11:00
【问题讨论】:
那么,到目前为止,您做了什么?你的方法是什么? @LorenzoBelli 好的,我的方法是每分钟移动两个连续小时标记之间角距离的 1/60,我们的误差应该小于 1/120。所以让它保持在最坏的情况下让我们假设 1/120。所以我们需要检查每2分钟。如果我们有一个度数作为角度 粘贴一些示例代码 您认为时针必须直接指向小时数,还是像传统的模拟时钟一样在数字之间移动?这会影响 12:05 和 11:55 在 A=30 时是否也有效? 这就是为什么我问是否假设时针直接指向小时。如果时针移动,它会极大地影响代表角度的时间。 11:00 和 1:00 仅在 5 分钟时工作,因为时针指向小时,但对于任何其他分钟值都不会出现这种情况。该算法可以通过几个循环来强制执行。在代码中显示一个尝试,我们可以引导您找到解决方案。 【参考方案1】:我会在伪代码中尝试一个想法
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
【讨论】:
【参考方案2】:目前在 Codechef 中进行比赛的问题。
https://www.codechef.com/OCT15/problems/TIMEASR
【讨论】:
【参考方案3】:我真的不明白你的问题是什么。 “这要怎么解决?”给出一个简短的答案有点含糊。但是,我要做的第一件事是将所有值转换为相同的单位。 30 度相当于整圈的 1/12,即一分钟内一只手移动 6 度(整圈的 1/60),另一只手移动 1/2 度(整小时 30 度)。所以你基本上是在尝试解决
abs( (t * 6) - (t*1/2) ) == 30 + n*360
其中n = 0,1,2,....
取模部分使得获得直接解决方案有点乏味,但您可以简单地为t
的任何值运行一个循环来找到解决方案。希望这可以帮助。如果没有,也许你应该考虑展示你的一些代码......
【讨论】:
ps:t
是自 0:00
以来的时间,以分钟为单位。要获得hh:mm
格式的时间,您必须在获得t
的解决方案后对其进行转换【参考方案4】:
这个问题现在不应该回答,因为它来自一个由 codechef 主持的 Long 竞赛。所以,对于像我们这样想要自己解决这个问题的爱好者来说,这会破坏这个问题。
【讨论】:
以上是关于查找具有给定时钟分针和时针角度的所有时间的主要内容,如果未能解决你的问题,请参考以下文章