Josephy 问题概述: 假设有N个人坐在圆桌周围,从第S个人开始报数,报到M的出列,然后再从下一个人开始数报 数,数到M的人出列¨¨¨如此重复,知道所有的人都出列为止。要求出列的先后顺序输出每个人的信息 !
# include
# include
typedef int datatype;
typedef struct cnode
{
datatype data;
struct cnode *next;
}clistnode;
typedef clistnode *clinklist;
clinklist head;
void Joseph(int n,int m,int s)
{
int i,j;
clinklist creatclinklist(int);
clistnode *p,*q,*r,*t;
head=creatclinklist(n);
q=head;
if(s>n) printf("error!n");
for(i=1;i q=q->next;
p=q->next;
for(i=1;i<=n;i++)
{
j=1;
while(j
r=p;
p=p->next;
if(p==head)
continue;
j++;
}
printf("%4d",p->data);
t=p;
if(p->next==head)
{
p=p->next->next;
r->next=head;
}
else
{
p=p->next;
r->next=p;
}
free(t);
}
}
clinklist creatclinklist(int n)
{
int i;
clinklist p;
p=(clinklist)malloc(sizeof(clistnode));
p->next=NULL;
head=p;
printf("Please input the element records of the chain!n");
for(i=n;i>0;i--)
{ p=(clinklist)malloc(sizeof(clistnode));
scanf("%d",&p->data);
if(n==i)
{
p->next=head;
head->next=p;
}
else
{
p->next=head->next