Difference in two for nested loops.(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;
}
为什么这两个不同,我在第一个中做错了什么?
在"正确"解中,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;
}
变量初始化可以直接放入循环中。因为它们是微不足道的变量,所以没有性能损失。
相关文章:
- 如何在自定义类中启用'auto loops'?
- 需要帮助定义循环控制变量(while loops)C++
- C 用于IF-Statments和while-loops的短路
- C++ and for/in (?) loops
- Xcode 调试不显示 for- 或 while-loops
- Range-for-loops 和 std::vector<bool>
- 为什么"% for loops"与求和算法相比内存成本相对较高?
- 如何使我的自定义类型与"range-based for loops"一起使用?
- OpenCV的执行速度(for loops和meanStdDev)
- GPU for loops:避免扭曲发散和隐式同步线程
- Arduino timed void draw() loops
- Difference in two for nested loops.(C++)