这是问题

找到所有不超过500个side1,side2和斜边的毕达哥拉斯三元组。使用三元组嵌套的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

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

编辑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行文本,并且向控制台打印出25万行文本非常非常慢。如果删除该打印语句,它将更快地执行。

其次,您的逻辑有误。变量side1side2rightSide永远不会在适当的时间重置为0,因此它们只会不断增加超出其预期值。尝试将它们重置为0,或者仅使用循环计数器代替类似的额外变量。

09-27 08:40