让我们米是数字的移动必须被朝向的移动的正侧和Ñ许多必须被向负侧进行制造。 米和ñ必须满足以下公式:
h = u * m - d * n
我们知道^h,ü和d。为你的例子将如下所示的公式(我假设^h应该是3而不是2,还看到我的评论):
3 = m * 2 - n * 1
->
n = 2 * m - 3
我们也知道,米> = 0,ñ > = 0和m和n是整数。现在,最简单的方式找到米和ñ将计算ñ为米 = 0,1,2,3,4 ......直到你将收到ň满足所有条件(你也可以根据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
所以答案是米 = 2和ñ = 1。您不必检查其他m的结果,因为您将始终收到更高的值(h = u * m - d * n是一个正在增加的功能)。
这不是一切。可能存在没有整数解的方程。在这种partocular情况下,我们正在考虑的线性不定方程根据Wikipedia具有整数解:
当且仅当ħ是d和ü
的最大公约数的倍数
让我们再次回到您的例子。 2和1的GCD是1,3是1的乘积,因此存在整数解。然而,让我们考虑h = 9,d = 2和u = 4。 GCD(2,4)是2并且9不是乘法2,所以没有解决方案。您必须在尝试查找m和n之前检查此条件,否则您将以不定式循环结束。
这功课吗? – 2014-11-08 08:54:14
@EdHeal你不明白这个问题。他只能通过U步(增加)或D步(减少)在给定方向上移动。二进制搜索因此不是OP正在寻找的。 http://en.wikipedia.org/wiki/Diophantine_equation:这是更多你正在寻找... :) – Rerito 2014-11-08 08:56:27
@pramodmaurya它不是在通用编程观点的数组。其实目的是,从0开始,通过给定的约束(U和D)导航,直到你到达目标H. – Rerito 2014-11-08 09:13:12