两个 for 嵌套循环的区别。(C++)
Difference in two for nested loops.(C++)
我试图解决以下问题:
令 x,y,z 为域 [-5,5] 中的整数。显示满足3*x+y^3-z^2=0的解(x,y,z)的个数。我最初的解决方案是这样的:
int main() {
int x=-6;
int y=-6;
int z=-6;
int p=0;
for(int i=-5; i<6; i++)
{
x++;
for (int j=-5; j<6; j++)
{
y++;
for(int k=-5; k<6; k++)
{
z++;
if(3*x +y*y*y -z*z==0)
p++;
}
}
}
std::cout<< p ;
return 0;
}
这是正确的解决方案:
int main() {
int x=-5;
int y=-5;
int z=-5;
int p=0;
for( x=-5; x<=5; x++)
for (y=-5; y<=5; y++)
for( z=-5; z<=5; z++)
if(3*x +y*y*y -z*z==0)
p++;
std::cout<< p;
return 0;
}
为什么这两个不同,我在第一个中做错了什么?
在 "correct" 解决方案中,对于 x
的每个新值,y
再次从 -5
开始。在您的版本中,y
从其先前的值开始递增,因此第二次迭代涵盖 [5,15]
、第三次 [15,25]
,依此类推。
奇怪的额外变量j
每次都覆盖了你希望y
覆盖的范围,但y
本身却没有。
在错误的代码中,变量 y 和 z 没有在循环开始时重置为它们范围的开头。
一个更短的正确例子是:
int main()
{
int p = 0;
for( int x=-5; x<=5; ++x )
for( int y=-5; y<=5; ++y )
for( z=-5; z<=5; ++z)
if( 3*x + y*y*y - z*z == 0 )
++p;
std::cout << p << std::endl;
return 0;
}
变量初始化可以直接放入循环中。
因为它们是微不足道的变量,所以没有性能损失。
我试图解决以下问题:
令 x,y,z 为域 [-5,5] 中的整数。显示满足3*x+y^3-z^2=0的解(x,y,z)的个数。我最初的解决方案是这样的:
int main() {
int x=-6;
int y=-6;
int z=-6;
int p=0;
for(int i=-5; i<6; i++)
{
x++;
for (int j=-5; j<6; j++)
{
y++;
for(int k=-5; k<6; k++)
{
z++;
if(3*x +y*y*y -z*z==0)
p++;
}
}
}
std::cout<< p ;
return 0;
}
这是正确的解决方案:
int main() {
int x=-5;
int y=-5;
int z=-5;
int p=0;
for( x=-5; x<=5; x++)
for (y=-5; y<=5; y++)
for( z=-5; z<=5; z++)
if(3*x +y*y*y -z*z==0)
p++;
std::cout<< p;
return 0;
}
为什么这两个不同,我在第一个中做错了什么?
在 "correct" 解决方案中,对于 x
的每个新值,y
再次从 -5
开始。在您的版本中,y
从其先前的值开始递增,因此第二次迭代涵盖 [5,15]
、第三次 [15,25]
,依此类推。
奇怪的额外变量j
每次都覆盖了你希望y
覆盖的范围,但y
本身却没有。
在错误的代码中,变量 y 和 z 没有在循环开始时重置为它们范围的开头。
一个更短的正确例子是:
int main()
{
int p = 0;
for( int x=-5; x<=5; ++x )
for( int y=-5; y<=5; ++y )
for( z=-5; z<=5; ++z)
if( 3*x + y*y*y - z*z == 0 )
++p;
std::cout << p << std::endl;
return 0;
}
变量初始化可以直接放入循环中。 因为它们是微不足道的变量,所以没有性能损失。