表达式不可分配。 C ++ for循环(初始化,条件,更新)

时间:2016-02-07 19:35:55

标签: c++ for-loop conditional-statements codeblocks

我正在尝试创建满足3个条件的代码:

1)x,y,z是小于1000的正整数 2)x总是小于y
3)x ^ 2 + y ^ 2 = z ^ 2

以下是我的代码" for"循环:

#include <iostream>
using namespace std;

int main()

{
    int x, y,z,i;
    for(x=1,y=1,z=1,i=0;x<1000,y<1000,z<1000, x<y, x*x + y*y = z*z;x++,y++,z++)
    {

          cout << "x= " << x << "y= " << y << "z= " << z << endl;

        i++;
    }
    cout << "There are " << i << "(x,y,z) triples satisfying x^2 + y^2 = z^2" ;
    return 0;
}

我得到的错误是:
1.错误:表达式不可分配
2.未使用的关系比较结果
3.表达结果未使用。

我可以知道我的代码有什么问题吗?

假设我使用&&代替,以满足3个条件并继续使用3个嵌套循环,逻辑是什么样的?

谢谢你们。 我对我的代码进行了更改以包含3个嵌套循环,但是我能找到的三元组数量似乎与预期的一样错误。

#include <iostream>

using namespace std;

int main()
{   int counter = 0;
    for (int x = 1; x != 1000; ++x, ++counter)
        {
            for (int y = 1; y != 1000; ++y)
                {
                    for (int z = 1; z != 1000; ++z)
                        {
                            if (x*x+y*y==z*z && x<y)
                            cout << "x=" << x << " y=" << y << " z=" << z<<  endl;
                    }
            }

    }

    cout << "There are " << counter << " (x, y, z) triples satisfying x^2 + y^2 = z^2";
    return 0;
}

初始化有问题吗?答案:878,我的答案:999

2 个答案:

答案 0 :(得分:0)

三个for循环看起来像

for (int x = 1; x != 1000; ++x)
{
   for (int y = 1; y != 1000; ++y)
   {
       for (int z = 1; z != 1000; ++z)
       {
          if (some_condition)
             ++counter;
       }
   }
}

您可以通过不运行最多1000个变量来改进这一点,因为您知道x < yxy都必须小于z。可能要小很多。

除了编译错误之外,您的单循环还存在同步增量xyz的问题,因此您只需检查(1,1, 1),(2,2,2),(3,3,3)等。这永远不会满足第三个条件。

答案 1 :(得分:0)

将代码重新插入循环中。我不知道为什么但它有效。

#include <iostream>

using namespace std;

int main()
{   int counter = 0;
for (int x = 1; x != 1000; ++x)
    {
        for (int y = 1; y != 1000; ++y)
            {
                for (int z = 1; z != 1000; ++z)
                    {
                        if (x*x+y*y==z*z && x<y)
                          {
                              counter++;
                              cout << "x=" << x << " y=" << y << " z=" << z<< endl;
                          }
                    }
            }

    }

    cout << "There are " << counter << " (x, y, z) triples satisfying x^2 + y^2 = z^2";

    return 0;
}