约瑟夫循环
最近看到论坛里好多约瑟夫循环的问题,其实原理很简单,我发一个以前在书上看到的一个代码,是用静态链表实现的,比较简单,这里以13个人为例#include <stdio.h>
#define N 13
struct person
{
int number;
int nextp;
}link[N+1];
int main()
{
int i,count,h;
for(i=1;i<=N;i++)
{
if(i==N)
link[i].nextp=1; //形成一圈
else
link[i].nextp=i+1; //指示下一个
link[i].number=i; //表示自己编号
}
printf("\n");
count=0;
h=N;
printf("people leave the circle\n");
while(count<N-1)
{
i=0;
while(i!=3)
{
h=link[h].nextp;
if(link[h].number)
i++;
}
printf("%4d",link[h].number);
link[h].number=0;
count++;
}
printf("the last one is ");
for(i=1;i<=N;i++)
if(link[i].number)
printf("%4d",link[i].number);
printf("\n");
return 0;
}