约瑟夫环问题,n个人围着一张桌子,从1开始报数,规定报道第k数的人自杀,接着下一给重新开始报数。这里n=41,k=3。
#include<stdio.h>
#include<stdlib.h>
typedef int EleType;
typedef struct LinkNode
{
EleType data;
struct LinkNode *next;
}LinkNode,*LinkList;
LinkNode *Creat(LinkList *L,int n)
{
LinkList r,p;
(*L)=(LinkNode*)malloc(sizeof(LinkNode));
r=*L;
int i;
for(i=1;i<n+1;i++)
{
p = (LinkNode*)malloc(sizeof(LinkNode));
p->data=i;
r->next=p;
r=p;
}
r->next=(*L)->next;
free(*L);
return r->next;
}
int main()
{
int n=41;
int k=3;
int m;
LinkList L,temp,p;
p=Creat(&L,n);
while(p!=p->next)
{
for(m=1;m<k-1;m++)
{
p=p->next;
}
printf("%d->",p->next->data);
temp=p->next;
p->next=temp->next;
free(temp);
p=p->next;
}
printf("%d",p->next->data);
system("pause");
}