我需要做的是找出所有勾股数为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