我没搞懂下面的答案,怎么做到的循环遍历,看起来就是一次性的啊
能帮忙解释一下代码吗 我把我能理解的已经注释上去了
```c
void CountOff( int n, int m, int out[] )
{
int item=n,i,num=0,j=1;
int s[MAXN];
for(i=0;i<n;i++)
s[i]=i+1; //s数组相当于显示队列情况的标志数组
while(item)
{
for(i=0;i<n;i++) //这里我搞不懂怎么做到的循环遍历
{
if(s[i]!=0) //等于0则跳过不计数
{
num++;
if(num==m) //如果累计到次数 把标志数组s对应改0代表踢出,out数组对应位置给顺序号
{
s[i]=0;
out[i]=j;
item--;
j++;
num=0;
}
}
}
}
}
```
```c
void CountOff( int n, int m, int out[] )
{
int item=n,//初始值是n个人
i,//用于循环 无具体含义
num=0,//当前数到第几个人
j=1;//人员退出次序 通过设置out数组的值,保存人员退出次序
int s[MAXN];//记录人员最大数量
for(i=0;i<n;i++)
s[i]=i+1; //s数组相当于显示队列情况的标志数组
//当找到最后一个人时,退出循环(每次找到一个人时,item就减一,直到0)
while(item)
{
//利用外层循环,实现内层迭代循环
for(i=0;i<n;i++) //这里我搞不懂怎么做到的循环遍历
{
if(s[i]!=0) //等于0则跳过不计数(说明已经被踢出)
{
num++;//数到了第几个
if(num==m) //如果累计到次数 把标志数组s对应改0代表踢出,out数组对应位置给顺序号
{
s[i]=0;//设置这个人退出了
out[i]=j;//设置这个人退出顺序
item--;//找到了人就少循环一次
j++;//(人员退出次序 加一)
num=0;//(当前数到的人从新计数)
}
}
}
}
}
for就是循环啊,总共n个元素,循环从0到n,就把所有元素都访问呢了一遍,不就是循环遍历了么