思路,定义一个标记数组,标记每个猴子的状态,出圈还是没出圈,然后创造一个死循环,让报数一直持续,然后直到只剩一只猴子
代码:
#include<stdio.h>
int flag[1100]; //标记对应编号的猴子的状态,走还是没走
int main()
{
int n;
int sum;
scanf("%d",&n);
sum=n;
int ct=0,i=1;
while(1) //死循环
{
if(flag[i]==0) //这里可以跳过已经出圈的猴子
{
ct++;
if(ct==3) //报数
{
flag[i]=1; //每出圈一个猴子就让总数sum--
sum--;
ct=0;
}
}
i++; //达到相邻报数的效果,可以看成猴子按顺时针围起来,顺时针报数
if(i>n) //编号一直在1--n之间变化,
i=i%n;
if(sum==1) //剩一只猴子就跳出循环
break;
}
for(int i=1;i<=n;i++)
if(flag[i]==0) //查找猴王的编号
printf("%d",i);
}