模拟时钟的最短路径算法

3

我有一个关于C语言的作业问题,让我很头疼,如果有人能帮我指点方向,我将不胜感激。

如果我有两个模拟表上的分钟点,例如t1(55分钟)和t2(7分钟),我需要计算两个点之间最短的步数。

到目前为止,我想出了这两个方程式:

-t1 + t2 + 60 =
    -55 + 7 + 60 
    = 12

t1 - t2 + 60 = 
    55 - 7 + 60 
    = 108

12 is lower then 108, therefore 12 steps is the shortest distance.

如果我比较这两个结果并使用最低值,似乎这样做是有效的。然而,如果我选择另外两个点,例如t1=39和t2=34,并将它们代入方程:

-t1 + t2 + 60 = -39 + 34 + 60 = 55
t1 - t2 + 60 = 39 - 34 + 60 = 35

35 is lower then 55, therefore 35 steps is the shortest distance.

然而,35并不是正确答案。最短的距离是5步(39-34=5)。

我的大脑有点混乱,我知道我缺少一些简单的东西。有人能帮忙吗?

模拟时钟面


1
+1 表示提出了明确的问题,并且事先透露这是一份作业。 :) - Robert Harvey
“t1 - t2 + 60 = 39 - 34 + 60 = 35” 不正确:结果应该是 “65”。不过,Edward Z. Yang 还是回答了这个问题。 - Jeremiah Willcock
2个回答

5
你需要的是对60取模的加减法。请查看%运算符。确保正确处理负数。

谢谢Edward,我现在已经理解了问题,并且得到了正确的结果! - Michael Pasqualone

0
如果你不想使用%运算符,可以尝试这种思路:对于每一对点(t1; t2),有两种连接它们的方式:一条路径将穿过0点(12点钟),另一条路径则不会。
假设t2>=t1,则第二段距离很容易计算:它是t2-t1。另一段距离是t1 + 60 - t2
我认为你的错误在于在第一个表达式中加上60。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接