有关C++的一个问题(多层循环嵌套的顺序问题)

来源:百度知道 编辑:UC知道 时间:2024/06/07 11:33:06
#include<iostream>
using namespace std;
void main()
{
int i,j,k,n(0);
for(k=0;k<=20;k++)
for(j=0;j<=33;j++)
for(i=0;i<=300;i+=3)
if(i/3+3*j+5*k==100)
{n++;
cout<<n<<": "<<k<<' '<<j<<' '<<i<<endl;
}
}
为什么结果n不是从1开始的;另外三个for循环如果顺序换一下,结果应该是一样的呀(就本程序而言),但是我把第一个与第三个换了一下,结果却不一样。请问关于for的多层嵌套有什么规定吗?

其实你的这个程序没问题,n是从1开始的,
只是因为得到数据太多,而能显示的组数有限,所以把前面的一些数据刷掉了,
你试试看把endl去掉就可以看到所有的数据了

n++;使n自加成,调换顺序肯定不行,第一个for循环执行30次,第二个for循环执行660次,第三个for循环执行1980次,如果调换次序坑订得到不同的结果。假设最外层for最大值为n,第二层为m,第三层为k,则外层循环n次,第二层n*m次,第三层n*m*k次。

//这样就可以了 (数据太多,被覆盖了)
#include<iostream>
using namespace std;
void main()
{
int i,j,k,n(0);
for(k=0;k<=20;k++)
for(j=0;j<=33;j++)
for(i=0;i<=300;i+=3)
if(i/3+3*j+5*k==100)
{
n++;
cout<<n<<": "<<k<<" "<<j<<" "<<i<<"\t";
}
}