题目描述:有n个人围成一圈,顺序排号,从第一个人开始报数,从1到3报数,凡报到3的人退出圈子,问最后留下来的幸运者是原来的几号。
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<math.h>
#define DANGER_NUM 3
int CyclicGame(int n)
{
int *arr=(int*)malloc(n*sizeof(int));//创建数组存放参与者信息
int count=0;//记录报数
int i;
int num=n;//幸运者数量
assert(arr!=NULL);
for(i=0;i<n;i++)//初始化为活动状态
{
*(arr+i)=1;
}
while(num>1)//幸运者为1时结束游戏
{
for(i=0;i<n;i++)
{
if(*(arr+i)==1)
{
count++;
if(count==DANGER_NUM)
{
*(arr+i)=0;
num--;
count=0;
}
}
}
}
for(i=0;i<n;i++)
{
if(*(arr+i)==1)
{
return i;
}
}
return -1;//查找失败,程序出错
}
int main()
{
printf("%d\n",CyclicGame(11));
return 0;
}