韩版鞋:C语言求助 猴子大王问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 10:55:12
从键盘上输入两整数m,n,表示n只猴子顺时针围成一圈,从第一只猴子开始,顺时针数到第m只猴子,令其离开队伍,再数到第m只猴子,再令其离开,最后剩下的一只猴子为大王,输出大王编号

给你一个我上周写的程序,不是键盘输入两个数,是define 的,你自己加上输入就可以了,只是有点小问题,看你自己怎么处理了。
#include<stdio.h>
#define N 50000
#define C 5
void main(){
int s[N],i,x=0,k,y=0;
for (i=0;i<N;i++) //给猴子赋个名字,其实指给数组付初值1--N,赋什么值不重要,关键是位置。
s[i]=i;
for(i=0;(i-y)!=N;i++) { //y是指当前不为-1的元素的位置,即没被下课的位置,在下面当y=i得到//
//当i-y=N,其实就是转了一圈还是这个数,也就是只剩下这个数了,所以就是找到了国王的时候,循环结束;//

if (s[i%N]!=-1){ //不是出局的位置就计数,所以会x++
x=x+1;
y=i; //将现在的i给y是为了确定下一个没出局的位置与这一个是否刚好一圈,以控制循环
if (x%C==0){
s[i%N]=-1; //当是C的倍数时,此数被下课,用-1来表示此位置出局
//for (k=0;k<N;k++) //显示当有一个位置出局后的情况,这个不重要,所以程序中可以不用
//printf("%d ",s[k]);
//printf("\n");
}
}
}
printf("经过第%d圈%d次报数最后的国王是第%d位",i/N+1,x,y%N+1);
}