c语言循环链表解决约瑟夫问题,关于循环链表解决约瑟夫环的问题

10个人,然后数到第5个出局,程序得出的结果是第一个数数到5,然后出局,而之后的数都是数到4就出局,这里有点不明白程序错在哪里,该怎么改。

#include 

#include

struct node{

int data;

struct node *next;

}node,*list,*p,*r;

void JOSEPHU(int n,int m)

{

int i,j;

list=NULL;

for(i=1;i<=n;i++)

{

p=(struct node*)malloc(sizeof(node));

p->data=i;

if(list==NULL)

list=p;

else

r->next=p;

r=p;

}

p->next=list;    /*建立一个循环链表*/

p=list;

for(i=1;i<=n;i++)

{

printf("%d  ",p->data);

p=p->next;

}

printf("\n"); /*打印链表,并检查循环链表是不输入正确*/

for(i=1;i

{

for(j=1;j

{

r=p;

p=p->next;

}

printf("出局人:%d\n",p->data);

r->next=p->next;

}

}

void main()

{

int x, z;

printf("请输入总人数:");

scanf("%d",&x);

printf("请输入密码:");

scanf("%d",&z);

JOSEPHU(x,z);

}

你可能感兴趣的:(c语言循环链表解决约瑟夫问题)