例题:有n个人围成一圈,报3的退出,问剩下的一个人的序号是多少?
int Circle(int n)//约瑟夫环
{
int *arr = (int *)malloc(n*sizeof(int));
int i;
for(i=0;i<n;i++)
{
arr[i] = 1;
}
int count = n; //存活的人数
int times = 0;//报的数字
i = 0;
while(count > 1)
{
if(arr[i] != 0)
{
times++;
if(times == 3)
{
arr[i] = 0;
times = 0;
count--;
}
}
i = (i+1)%n;//3
}
for(i=0;i<n;i++)
{
if(arr[i] != 0)
{
break;
}
}
free(arr);
return i+1;
}