有一个无限的一维数组,范围从(-infinity,infinity)。您目前处于单元格编号0.您的目标是达到单元格编号H.允许两种移动。
U =向右的步骤(正面)。
D =左侧的步骤(负侧)
我们必须找到最低数量。移动如果(可能)
对于h = 2 u = 2 d = 1
首先向右移动2步到达2号单元格。然后向左移动1步到达1号单元格,最后向右移动2步到达目标。因此,需要3次移动,这是最小的。
解决这个问题的算法是什么。我的方法是进行递归调用,即h + u和h-d,直到h == 0.
答案 0 :(得分:2)
让 m 成为必须向正面移动的一系列动作,以及 n 必须朝向正面移动的一些动作消极的一面。 m 和 n 必须满足以下等式:
h = u * m - d * n
我们知道 h , u 和 d 。您的示例的等式将如下所示(我假设 h 应该是3而不是2,请参阅我的评论):
3 = m * 2 - n * 1
->
n = 2 * m - 3
我们也知道 m > = 0, n > = 0和 m 和 n 是整数。现在,找到 m 和 n 的简单方法是计算 m = 0,1,2的 n ,3,4 ...直到您将收到满足所有条件的 n (您还可以根据 n 计算 m )。在您的示例中,它将是:
m = 0 -> n = -3 is an integer but n < 0 so it is not an answer
m = 1 -> n = -1 is an integer but n < 0 so it is not an answer
m = 2 -> n = 1
所以答案是 m = 2且 n = 1。您不必检查其他 m 的结果,因为您将始终收到更高的值( h = u * m - d * n 是一个不断增加的功能)。
这不是一切。可能存在没有整数解的方程。在这个局部情形中,我们考虑线性丢番图方程,根据Wikipedia有整数解:
当且仅当 h 是 d 和 u 的最大公约数的倍数
让我们再次回到你的榜样。 2和1的GCD是1,3是1的乘法,因此存在整数解。但是,我们要考虑 h = 9, d = 2且 u = 4。 GCD(2,4)是2而9不是乘法2所以没有解。在尝试查找 m 和 n 之前,您必须检查此情况,否则您将以不定式循环结束。