我需要做的是找出所有勾股數爲A,B和C到500這裏是我的代碼的程序:找到所有的勾股數小於500
int main()
{
for (int a = 1; a <= 500; a++)
{
for (int b = 1; b <= 500; b++)
{
for (int c = 1; c <= 500; c++)
{
if ((a*a)+(b*b) == c*c && c <= 500)
{
cout << a << " + " << b << " = " << c << endl;
}
}
}
}
}
我的發言爲您在每個值c,然後b,然後a。所以我的問題似乎在if語句中。它檢查平方和b平方是否等於c平方。沒關係。儘管如此,一些有趣的事情發生在和聲明之後。如果我使c * c < = 500,我會得到比c < 500小得多的小數字列表。但是,如果使用c < 500,那麼程序將在200s內開始並上升,失去明顯的三元組,如3+ 4 = 5。我很好奇爲什麼會發生這種情況,因爲顯然我不會爲每個值打印每個三元組。
編輯:好的,顯然c和c * c的區別很大,但我用c * c來測試程序中有什麼奇怪的東西,抱歉不清楚。另外,刪除和語句也會出現同樣的問題。我不明白爲什麼這個節目現在的狀態是從200年代開始,而不是在3 + 4 = 5年。以下是當前輸出:
208 + 306 = 370
208 + 390 = 442
209 + 120 = 241
210 + 72 = 222
210 + 112 = 238
210 + 176 = 274
210 + 200 = 290
210 + 280 = 350
210 + 416 = 466
...
你問你爲什麼在限制'c * c <= 500'而不是'c <500'時爲什麼你的列表更短?這應該是相當明顯的...... –
在'if'條件下測試'c <= 500'是多餘的,因爲for循環已經保證這是真的。我不明白爲什麼這個代碼會錯過'3^2 + 4^2 = 5^2',你能解釋還是顯示輸出?當然,對於'c * c <= 500',結果會更少。這種情況顯然更具有限制性。 – Nabla
那麼,顯然如果你在200年代開始,你會錯誤3^2 + 4^2 = 5^2? – qwr