#include<stdio.h>
void number(int a[],int n,int t,int num); //超过100就崩溃............
int dele(int a[],int n,int t);
int main()
{
int n,i,t,num; //n为当前猴子数量,i作为中间量,t为猴子总量
int a[100];
num=1;
printf("请输入猴子数量!\n");
scanf("%d",&t);
n=t;
while(n!=1)
{
number(a,n,t,num);
n=dele(a,n,t);
for(i=t-1;i>0;i--)
{
if(a[i]!=-1)
{ //为下一次报数做准备
if(a[i]==1)
num=2;
else if(a[i]==2)
num=3;
break;
}
}
}
for(i=0;i<t;i++)
{ //查找大王
if(a[i]!=-1)
break;
}
printf("猴子%d当大王\n",i+1);
return 0;
}
void number(int a[],int n,int t,int num)
{ //对猴子编号的函数
int i;
for(i=0;i<t;i++)
{
if(a[i]==-1)
continue;
a[i]=num;
if(num==3)
{
num=1;
}
else num++;
}
}
int dele(int a[],int n,int t)
{ //对报数为3的猴子赋值为-1,并更改当前猴子数量的函数
int i;
for(i=0;i<t;i++)
{
if(a[i]==3)
{
a[i]=-1;
n--;
}
}
return n;
}