我寫了一個程序,必須找到歐拉問題的解決方案。我想訓練我的程序技巧,這就是爲什麼我已經簽署了歐盟。我可以使關於EulerProblem的代碼更快嗎?
這就是問題:
甲勾股數是一組三個自然數,一個< b <的C,爲此, 一個^ 2 + B^2 = C^2
對於例如,3^2 + 4^2 = 9 + 16 = 25 = 5^2。
只存在一個畢達哥拉斯三元組,其中a + b + c = 1000. 查找產品abc。
這是我的代碼,但它運行得很慢,需要幾個小時才能給我正確的abc。
static int findTriplet(int getal)
{
boolean test = false;
for(int a = 1; !test; a++)
for(int b = a+1; !test; b++)
for(int c = b+1; !test; c++)
{
if(a*a + b*b == c*c)
{
if(a+b+c == getal)
{
return (a*b*c);
}
}
}
return 0;
}
是否有可能使代碼更快或者是正常的,它需要時間?
親切的問候,
編輯:
感謝您的幫助。 !測試布爾是無用的抱歉,這工作:這個作品:
static int findTriplet(int getal)
{
for(int a = 1; a < 1000; a++)
for(int b = a+1; b < 1000; b++)
for(int c = b+1; c < 1000; c++)
{
if(a*a + b*b == c*c)
{
if(a+b+c == getal)
{
return (a*b*c);
}
}
}
return 0;
}
我也寫了一個haskell變種,也是伎倆。
認爲這在Haskell中更容易,效率更高。
Thaks的提示。
爲什麼使用'!test'作爲循環控制表達式? – 2012-02-18 10:45:15
也許你可以接受你過去的問題的一些答案。 – Coren 2012-02-18 10:45:17
你不會打破最內層的循環,所以它永遠循環一次= 1,b = 2。 – soulcheck 2012-02-18 10:45:43