我的老師告訴我要創建一個算法來解決這個問題,但我似乎無法弄清楚如何才能完成這項工作。你可以幫我嗎?困難的數學/編程任務
(a + b)(b + c)(c + a) = 2012
可以有這個問題的多個解決方案,但C> = B> =一個
我的老師告訴我要創建一個算法來解決這個問題,但我似乎無法弄清楚如何才能完成這項工作。你可以幫我嗎?困難的數學/編程任務
(a + b)(b + c)(c + a) = 2012
可以有這個問題的多個解決方案,但C> = B> =一個
我肯定有給予更多的信息,例如如何解決它(如使用試驗和錯誤或解算器算法)。對此有何言論?
在給定的信息:
你有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(沒有嘗試它,但應該工作)。
假設A,B,C必須是整數:
首先比化2012到所有可能的組3個數字(三胞胎)。 (你可以這樣做,首先分解成2個數字的集合,然後將這些分解爲三元組)。
然後在每一個三重(X,Y,Z)找到解決方案:
a + b = x
b + c = y
a + c = z
c >= b
b >= a
(只是一個旁註)'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)'。 –
'y-c-b = y-(z-a) - (x-a)= y-z-x + 2a'。另外,'(x,y,z)'的'(a,b,c)'是'(y,z,x)'的'(b,c,a)'。 –
不能3個嵌套循環解決這個問題? – batbaatar
當問題很小時,蠻力。 – pad
Corrently我有-249 250和253我在紙上計算出它的答案,三個嵌套循環花了我很多時間,所以這是不夠好。 – MJA