有n个人围成一圈,从第1个人开始报数1、2、3,每报到3的人退出圈子。编程使用链表找出最后留下的人。
#include <stdio.h>
#include <stdlib.h>
int num[1000000];
int main()
{
int i,k,m,n;
int *p;scanf("%d",&n);
p=num;
for(i=0;i<n;i++)
*(p+i)=i+1;//以1到n为序给每个人编号
i=0;//i为每次循环的变量
k=0;//k按1,2,3报数时的计数变量
m=0;//m为退出人数
while(m<n-1)//当退出人数比n-1小时(即为退出人数大于1时)执行循环体
{
if(*(p+i)!=0) k++;
if(k==3)
{
*(p+i)=0;//退出人数标号置为0
k=0;
m++;
}
i++;
if(i==n) i=0;//报数到尾后,i恢复为0
}
while(*p==0) p++;
printf("%d",*p);
}