作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题来了
找出所有边 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 行文本非常非常慢的。如果删除该打印语句,它将执行得更快。
其次,你的逻辑有问题。变量 side1
、side2
和 rightSide
永远不会在适当的时候重置为 0,因此它们只会不断递增,超出预期值。尝试将它们重置为 0,或者只使用循环计数器而不是像那样的额外变量。
关于c++ - 所有可能的毕达哥拉斯三元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12500037/
我是一名优秀的程序员,十分优秀!