约瑟夫环问题,希望哪位高手能给我解惑~
#include<stdio.h> #define ALL 15
int main()
{
int count = ALL; //count表示当前圈内剩下的人数
int num=0; //num表示当前报的数字
int i,j; //i表示当前报数的人对应的下标
int left; //left 表示最后剩的那个人对应的编号
int a[ALL] = {0};
for(i=0; i<ALL; i++)
a[i] = i+1; //a[i]保存第i个人的编号
i = 0; //从下标为0的人开始报数
while(count>1) //如果剩余人数大于1则循环
{
num++;
if(num == 3) //报数到m的人离开
{
for(j=i; j<count-1; j++) //将下标为i的元素删除并把后一位编号前移
a[j] = a[j+1];
count--; //当前剩余人数减1
num = 0; //下一个人重新从1开始报数
i-=1;
}
i=(i+1)%count; //计算下一个要报数的人的下标
}
left = a[0]; //最后只剩下一个人,将其编号赋值给remain
printf("出卖耶稣的叛徒是NO:%d\n",left);
return 0;
}
代码如上
我想知道, i=(i+1)%count; 这句环状处理到底有什么作用,为什么不能直接写成i=i+1呢,我试过,改后就不对了,求解释!