我正在尝试创建满足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
答案 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 < y
且x
和y
都必须小于z
。可能要小很多。
除了编译错误之外,您的单循环还存在同步增量x
,y
和z
的问题,因此您只需检查(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;
}