2012-01-18 25 views
-2

我的老師告訴我要創建一個算法來解決這個問題,但我似乎無法弄清楚如何才能完成這項工作。你可以幫我嗎?困難的數學/編程任務

(a + b)(b + c)(c + a) = 2012 

可以有這個問題的多個解決方案,但C> = B> =一個

+5

不能3個嵌套循環解決這個問題? – batbaatar

+1

當問題很小時,蠻力。 – pad

+0

Corrently我有-249 250和253我在紙上計算出它的答案,三個嵌套循環花了我很多時間,所以這是不夠好。 – MJA

回答

3

我肯定有給予更多的信息,例如如何解決它(如使用試驗和錯誤或解算器算法)。對此有何言論?

在給定的信息:

  • 你有3個變量,所以你需要3個方程來解決這個問題。事實並非如此。這導致3個變量中有2個可能變成(幾乎)任何值(例如,三個變量中的兩個不能爲0)。

  • 考慮我們上面定義(2個變量將不會被計算,而是由用戶給定的 - 或以其他方式正好被設置爲任意值),這是相當容易修改公式,所以它相匹配的經典二次方程:

    (A + b)*(b + C)*(C + A)= 2012

    (A + b)*(b + C)*(C + A) - 2012 = 0

    (a + b)*(a + c) - 2012 /(b + c)= 0

    a * a + a * c + a * b + b * c - 2012 /(b + C)= 0

    A²+(B * C)* A + B * C - 2012 /(B + C)= 0

    不要忘記,我們必須確定是唯一的真正變量!

  • 現在我們有一個簡單的公式,我們可以使用學校數學來解決。

    標準公式x² + px + q = 0可以以數值的方式解決: x1 = -p/2 - sgn(p) * sqrt(pow(p/2, 2) - q)x2 = q/x1

  • 比較這兩個公式,你只需要建立關聯:

    X = A

    P = B * C (b + c)

    現在缺少的東西只是解決上面給出的等式。

就是這樣。雖然認爲自從我上次做這件事以來已經有相當長的一段時間了,所以我可能在沿途的某個地方出錯了。所以請你自己解決方程來驗證這一點。 :)

編輯: 用C> = B> =一個解決這個問題,只需設置一個變量,以一個固定的數,例如c = 10000,然後讓b從0運行到c,直到你找到一個解決方案,其中< b(沒有嘗試它,但應該工作)。

4

假設A,B,C必須是整數:

首先比化2012到所有可能的組3個數字(三胞胎)。 (你可以這樣做,首先分解成2個數字的集合,然後將這些分解爲三元組)。

然後在每一個三重(X,Y,Z)找到解決方案:

a + b = x 
b + c = y 
a + c = z 
c >= b 
b >= a 
+0

(只是一個旁註)'let g(x,y,z)a = let b = xa;在(a,b,c,y-c-b)→g(1,503,4)(-249)==>(-249,250,253,0)'中的c = z-a。 'g(1,2012,1)(-1005)==>(-1005,1006,1006,0)'; g(2,503,2)( - 250)==>( - 250,252,252,-1)'; g(2,503,2)( - 249)==>(-249,251,251,1)'。 –

+0

'y-c-b = y-(z-a) - (x-a)= y-z-x + 2a'。另外,'(x,y,z)'的'(a,b,c)'是'(y,z,x)'的'(b,c,a)'。 –