有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的人。(简单约瑟夫环问题)
#include <stdio.h>
#include <stdlib.h>
void main()
{
int *p,i,n;
printf("请输入参加报数的人数:");
scanf("%d",&n);
p=(int *)malloc(n*4);
int k=1;//k控制所报的数
int m=0;//m控制退出的人数
do
{
for(i=1;i<=n;i++)
{
if(*(p+i)!=0)
{
if(k==3)
{
printf("%d号退出了/n",i);
*(p+i)=0;//将退出的人标记为0
m++;//退出人数加1
k=0;
}
k++;
}
}
*(p+i)=k;//循环一轮,指向第一个(可有可无)
}while(m<n-1);
for(i=1;i<=n;i++)
{
if(*(p+i)!=0)
{
printf("留下的是%d号/n",i);
}
}
free(p);
}