报数游戏 报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。 本题要求编写函数,给出每个人的退出顺序编号。 #include <stdio.h> #define MAXN 20 void CountOff( int n, int m, int out[] ); int main() { int out[MAXN], n, m; int i; scanf("%d %d", &n, &m); CountOff( n, m, out ); for ( i = 0; i < n; i++ ) printf("%d ", out[i]); printf("\n"); return 0; } /* 你的代码将被嵌在这里 */ //a[i] = 1 2 3 4 5 6 7 8 9 10 11 //序列号 // i = 0 1 2 3 4 5 6 7 8 9 10 //索引 //out[i] = 4 10 1 7 5 2 11 9 3 6 8 //对应退出序号 void CountOff(int n, int m, int out[]){ int i, j, judge, num; for(i=0;i<n;i++) a[i]=i+1; i=0;//索引值 j=0;//退出的位次 judge=0;//判断索引 num=0;//执行次数索引 while(cnt<num){//总执行次数 if(a[i]!=0)//判断是否需要跳过已退出 judge++; if(judge==m){//到达指定位置 j++;//更新将要储存的位次 out[i]=j;//存储到相应out[i]中 a[i]=0;//删除a[i],使a[i]不再计入判断索引 judge=0;//更新judge,开启下一个位置 num++;//执行次数加一 } i++;//增加i if(i==num){//重置i,开启下个周期 i=0; } } }