【问题标题】:Expression is not assignable. C++ for loop (initialisations, conditions, updates)表达式不可赋值。 C++ for 循环(初始化、条件、更新)
【发布时间】:2016-05-17 10:26:09
【问题描述】:

我正在尝试创建满足 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. 表达式结果未使用。

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


假设我使用&amp;&amp; 而不是, 以满足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

【问题讨论】:

  • 你确定这会形成一个有效的条件表达式:x&lt;1000,y&lt;1000,z&lt;1000, x&lt;y, x*x + y*y = z*z;??你是说x&lt;1000 &amp;&amp; y&lt;1000 &amp;&amp; z&lt;1000 &amp;&amp; x&lt;y &amp;&amp; x*x + y*y == z*z;
  • 表达式x*x + y*y = z*z 确实不是一个有效的赋值。您是否打算使用 == 检查是否相等?
  • 您正在寻找符合您条件的&amp;&amp;,而不是,
  • 你需要三个嵌套的 for 循环。
  • x=1,y=1,z=1,i=0;xx + yy == z*z;x++,y++,z++ 改成这个了

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


【解决方案1】:

三个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 &lt; y 以及 xy 都必须小于 z。可能会小很多。


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

【讨论】:

    【解决方案2】:

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

    #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;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-07-11
      • 2011-03-14
      • 2021-03-15
      • 2018-02-19
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多