题目如下
题目内容:n只猴子(n<100)要选大王,选举方法如下:所有猴子按1,2,3,……, n编号围坐圈,从第1号开始按照1,2,……, m报数,凡报到m号的退出圈外,如此循环报数,直到圈内剩下一只猴子时,这只猴子就是大王。编程一个程序实现上述过程,n和m由键盘输入。
输入:猴子的数量n及报数的最大数字
输出:退出圈外的猴子编号序列(每数字后紧跟1个空格)
样例 输入: 5 3
输出: 3 1 5 2 4
代码如下:
#includeint main(){ int flag[99],count,out,m,n,t; //flag数组用于判断当前数字是否输出过 //count用于记录报数 //out当前剩余猴子 //t当前轮数轮到第几只猴子,计数 scanf("%d",&n); scanf("%d",&m); out=n;//初始剩余量等于总量 count =0;//初始报数为0 for(t=0;tn)//判断当前计数是否超过总数 { t=1;//从1开始计数 } if(flag[t-1]==0)//已报数 { t++; } else if(flag[t-1]==1)//未报数 { count++;//记录 if(count==m)//当前记录数等于要求报数 { printf("%d",t); printf(" "); flag[t-1]=0;//已报数 t++; out--;//剩余量减少 count=0;//记录归零 } else//不等于 { t++; } } }return 0;}