joseph环问题的提出与解决
源代码在线查看: j.cpp
#include
#include
#define NULL 0
typedef struct node
{
int data1;
int data2;
struct node * next;
}Lnode;
void Hello()
{
printf("欢迎进入joseph环\n");
}
Lnode *set(int n,Lnode *r)
{
Lnode *p,*q;
int i;
q=(Lnode *)malloc(sizeof(Lnode));
r=q;
for(i=1;i {
p=(Lnode *)malloc(sizeof(Lnode));
q->data1=i;
q->data2=NULL; //初始密码为空
q->next=p;
q=p;
}
p->data1=n;
p->data2=NULL;
p->next=r;
r=p;
return r;
}
Lnode *access(int n,int m,Lnode *r)
{
int i,j,k;
Lnode *p,*q;
p=r;
for(i=1;i {for(j=1;j p=p->next;
q=p->next;
p->next=q->next;
printf("第%d个出列的人序号为:%d\n",i,q->data1);
printf("请输入此人隐含得密码\n");
scanf("%d",&k);
m=k;
}
printf("第%d个出列的人序号为: %d\n",n,p->next->data1);
r=p;
return r;
}
void end()
{
printf("错误的输入,程序将关闭\n");
}
void exit()
{
printf("thank you for using\n");
}
void main()
{
Lnode *r;
int n,m,c; //n为人数 m为报数上限
do{
Hello();
printf("首先请输入人数以及报数——总数:______报数上限_____\n");
scanf("%d%d",&n,&m);
if(n>0&&m>0)
{
Lnode *set(int n,Lnode *r);
r=set(n,r);
access(n,m,r);
}
else
end();
printf("1:重新进入 2:退出\n");
scanf("%d",&c);
if(c==2)
exit();
}while(c==1);
}