有n只猴子,从1开始报数,报到m的猴子离开,剩下的猴子接着从1开始报数。
主要在于模拟整个过程。
#include<stdio.h>
int main()
{
int n,m;
int a[301];
while(scanf("%d%d",&n,&m))
{
if(n==0 && m==0)
break;
for(int i=1;i<=n;i++)
a[i] = i;
int t=0; //报号
int j=1; //猴子索引
int num=n; //当前剩余猴子数量
while(1)
{
while(a[j]==0)
{
j=(j+1)%n;
if(j==0) j=n;
}
t++; //当前第j个猴子报了一个数
if(t==m)
{
t=0;
num--;
a[j]=0;
}
if(num==1)
break;
//找下一个猴子报数
j=(j+1)%n;
if(j==0) j=n;
}
int i=1;
while(a[i]==0) i++;
printf("%d\n",i);
}
return 0;
}