模拟选猴王

        

#include<stdio.h>
#include<stdlib.h>
int aloop[310];
int main(){
int n,m,i;
while(1){
scanf("%d%d",&n,&m);
if(n==0)
break;
for(i=0;i<n;i++){//编号
aloop[i]=i+1;
}
int nptr=0;
for(i=0;i<n;i++){//每次循环将一个猴子赶出去
int ncounter=0;
while(ncounter<m){//数m个猴子
while(aloop[nptr]==0)//跳过数过的猴子
nptr=(nptr+1)%n;//跳到下一位
ncounter++;
nptr=(nptr+1)%n;//跳到下一位
}
nptr--;//五个手指四个缝隙,数m只猴子,跳m-1下,要回退一位
if(nptr<0){
nptr=n-1;//当nptr=0时回退会变为负数
}
if(i==n-1)
printf("%d\n",aloop[nptr]);//输出猴王的编号
aloop[nptr]=0;//应该跳过的猴子
}
}
}

 

posted @ 2017-11-20 18:08  jrx  阅读(119)  评论(0编辑  收藏  举报