实验8-1-8 报数
写了几遍,还有点没太明白,便把写的最清晰的一次记录下来。
void CountOff( int n, int m, int out[] ){
//数组值赋零,便于当作 没有报数 和 报完数被淘汰 的依据。
for(int i=0;i<n;i++){
out[i]=0;
}
//index,记录淘汰位次。从一开始,便于与数组下标差一区分
//count记录报数
//i数组下标
int index=1,count=0,i=0;
//直到index == n 说明报完数
while(index<=n){
//不是报完数淘汰的,或是没报数的。
if(out[i] == 0){
count++;//报数加一
}
//报数等于给定m值
if(count == m){
//再次判断有没有淘汰
if(out[i] == 0){
//赋予第几个淘汰的
out[i]=index;
//淘汰人数加一
index++;
//重新开始报数
count=0;
}
}
//下个数组元素,也就是下个人
i++;
//防止下标越界,满了就要从零开始。
i%=n;
}
}