讓我們米是數字的移動必須被朝向的移動的正側和Ñ許多必須被向負側進行製造。 米和ñ必須滿足以下公式:
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