在线等待!!有关约瑟夫问题。
muhao 2003-10-17 10:23:27 链表实现的约瑟夫问题
//链表式约瑟夫问题
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
typedef struct node_type{
int seq,code;
struct node_type *next;
}link;
main()
{
int i,m,n,cn;
link *h,*p,*q;
printf("Input the first code m:");
scanf("%d",&m);//输入初始密码
printf("Input number n:");
scanf("%d",&n);//输入人数
m=m-1;
p=(link*)malloc(sizeof(link));
h=p; q=p;
printf("Input codes:");
for(i=1;i<=n-1;i++)
{
scanf("%d",&cn);
p->seq=i;p->code=cn;
p=(link*)malloc(sizeof(link));
q->next=p; q=p;
}
scanf("%d",&cn);
p->seq=n;
p->code=cn;
p->next=h;
if((n>1)&&(m==0))
{
m=h->code;printf("%d ",h->seq);
p->next=h->next;
free(h);
h=p->next;
}
p=h;
while((n>1)&&(m!=0))
{
if(m>1) for(i=1;i<=m-1;i++)p=p->next;
q=p->next;
m=q->code;
printf("%d ",q->seq);
p->next=q->next;
free(q);
n=n-1;
}
printf("%d\n",p->seq);
getch();
}
有不明白的地方如下:
在程序开始为什么要做“m=m-1”