猴子选大王
#include<stdio.h>
int main()
{
int n,num[2000],i,start,cnt;
scanf("%d",&n);
for(i=0;i<n;i++)
{
num[i]=i+1;
}
start=0;
cnt=0;
int m=n;
while(m>1)
{
m--;
while(cnt<3)
{
if(num[start]!=0)
cnt++;
if(cnt==3)
{
num[start]=0;
}
start=(start+1)%n;
}
cnt=0;
}
for(i=0;i<n;i++)
{
if(num[i]!=0) printf("%d",num[i]);
}
return 0;
}
输入n,然后对num数组赋初值,即下标为i的元素的编号为i+1
start=0,从编号为1的元素开始报数,一共循环n-1次,由于n不能改变,所以先把n的值赋给m,然后通过下面的while循环,找出报数为3的元素并出列(如果start的值大于0,就让cnt加1,如果cnt=3,则让start的元素值为0)
start=(start+1)%n是为了使数组num变成一个循环数组
遍历数组,找出唯一一个非0值即为猴王,输出