gpt4 book ai didi

c++ - 所有可能的毕达哥拉斯三元组

转载 作者:行者123 更新时间:2023-11-30 02:03:04 28 4
gpt4 key购买 nike

问题来了

找出所有边 1、边 2 和斜边不超过 500 的毕达哥拉斯三元组。使用嵌套的三元组 for 循环尝试可能性。

下面是我的尝试

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
int side1 = 0;
int side2 = 0;
int rightSide = 0;

cout << "Right Side" << setw(10) << "Side1" << setw(10) << "Side2" << endl;

for(int i=1;i<=500;i++)
{
side1++;
//cout << side1 << endl;

for(int a=1;a<=500;a++)
{
side2++;
//cout << "side 2 " << side2 << endl;

for(int c=1;c<=500;c++)
{
rightSide++;
int rightSideSqr = rightSide*rightSide;
int side1Sqr = side1*side1;
int side2Sqr = side2*side2;

if(rightSideSqr == side1Sqr+side2Sqr)
{
cout << rightSideSqr << setw(15) << side1 << setw(10) << side2 << endl;
}


}
}
}
}

但它没有成功,似乎是一个无限循环。请帮忙。

请注意:我是C++的新手,我是自学的。而且,这不是作业,我做了问题陈述,因为这是表达问题的最佳方式。

编辑

右侧 Side1 Side2

运行成功(总时间:1s)

编辑 2

工作代码

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
//int side1 = 0;
//int side2 = 0;
//int rightSide = 0;

cout << "Right Side" << setw(10) << "Side1" << setw(10) << "Side2" << endl;

for(int i=1;i<=500;i++)
{
//side1++;
//cout << side1 << endl;

for(int a=1;a<=500;a++)
{
//side2++;
//cout << "side 2 " << side2 << endl;

for(int c=1;c<=500;c++)
{
//rightSide++;
int rightSideSqr = c*c;
int side1Sqr = i*i;
int side2Sqr = a*a;

if(rightSideSqr == (side1Sqr+side2Sqr))
{
cout << rightSideSqr << setw(15) << i << setw(10) << a << endl;
}


}
}
}
}

最佳答案

这不是无限循环,它只是一个非常慢的有限循环。 I/O 很慢——您在中间循环的 cout 语句中打印出 500*500 = 250,000 行文本,并且向控制台打印出 250,000 行文本非常非常慢的。如果删除该打印语句,它将执行得更快。

其次,你的逻辑有问题。变量 side1side2rightSide 永远不会在适当的时候重置为 0,因此它们只会不断递增,超出预期值。尝试将它们重置为 0,或者只使用循环计数器而不是像那样的额外变量。

关于c++ - 所有可能的毕达哥拉斯三元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12500037/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com