
约瑟夫环问题求解利用单循环链表作为存储结构模拟此过程
展开全部
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int ID;
int code;
Node *next;
}Node;
void creat(Node **L,int n)
{
int i,e;
Node *p,*s;
*L=(Node *)malloc(sizeof(Node));
(*L)->next=*L;
p=*L;
(*L)->ID=1;
printf("输入第1个人的密码:");
scanf("%d",&e);
(*L)->code=e;
for(i=2;i<=n;i++)
{
s=(Node *)malloc(sizeof(Node));
printf("输入第%d个人的密码:",i);
scanf("%d",&e);
p->next=s;
p=s;
s->next=*L;
s->ID=i;
s->code=e;
}
printf("*******************************************\n");
}
void Joseph(Node **L,int m)
{
int i,Flag=1;
Node *p,*q,*r;
p=q=*L;
while(Flag)
{
for(i=1;i<m;i++)
{
q=p;
p=p->next;
}
if(p==q)
Flag=0;
r=p;
q->next=p->next;
p=p->next;
m=r->code;
printf("第%d个人出列,密码为:%d\n",p->ID,p->code);
free(r);
}
}
void print(Node *L)
{
Node *p=L->next;
while(p!=L)
{
printf("序号:%d 密码:%d\n",p->ID,p->code);
p=p->next;
}
printf("*******************************************\n");
}
void main()
{
int m,n;
Node* La;
printf("请输入总人数:");
scanf("%d",&n);
printf("请输入初始密码:");
scanf("%d",&m);
printf("\n");
creat(&La,n);
printf("每个人的序号与密码为:\n");
print(La);
printf("*******************************************\n");
printf("出圈顺序依次为:\n");
Joseph(&La,m);
}
#include<stdlib.h>
typedef struct Node
{
int ID;
int code;
Node *next;
}Node;
void creat(Node **L,int n)
{
int i,e;
Node *p,*s;
*L=(Node *)malloc(sizeof(Node));
(*L)->next=*L;
p=*L;
(*L)->ID=1;
printf("输入第1个人的密码:");
scanf("%d",&e);
(*L)->code=e;
for(i=2;i<=n;i++)
{
s=(Node *)malloc(sizeof(Node));
printf("输入第%d个人的密码:",i);
scanf("%d",&e);
p->next=s;
p=s;
s->next=*L;
s->ID=i;
s->code=e;
}
printf("*******************************************\n");
}
void Joseph(Node **L,int m)
{
int i,Flag=1;
Node *p,*q,*r;
p=q=*L;
while(Flag)
{
for(i=1;i<m;i++)
{
q=p;
p=p->next;
}
if(p==q)
Flag=0;
r=p;
q->next=p->next;
p=p->next;
m=r->code;
printf("第%d个人出列,密码为:%d\n",p->ID,p->code);
free(r);
}
}
void print(Node *L)
{
Node *p=L->next;
while(p!=L)
{
printf("序号:%d 密码:%d\n",p->ID,p->code);
p=p->next;
}
printf("*******************************************\n");
}
void main()
{
int m,n;
Node* La;
printf("请输入总人数:");
scanf("%d",&n);
printf("请输入初始密码:");
scanf("%d",&m);
printf("\n");
creat(&La,n);
printf("每个人的序号与密码为:\n");
print(La);
printf("*******************************************\n");
printf("出圈顺序依次为:\n");
Joseph(&La,m);
}
更多追问追答
追问
运行的时候有错误 说是Error spawning cl.exe
怎么回事呢
追答
不会啊!我刚运行过的!
你用的是VC6.0么?
看看是不是有正在运行着的对话框!!
如果有的话,关了!
展开全部
先想好你想要的对应关系是什么样子的对应,数组b会不会变动?如果数组b不变而且a数组中的值限定在你设定的值内的话,就直接根据数组a元素的值去查找数组b就可以了,比如a[i] = 8;那么你要的值就是b[8-1],或者写成b[a[i]-1].
如果是这样“对应”的话,a中的重复项将对应到b中的同一个项。没问题。
如果是这样“对应”的话,a中的重复项将对应到b中的同一个项。没问题。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
参考这个经典代码,自己顺便再学习一下
http://blog.sina.com.cn/s/blog_7d49c18001010cqn.html
http://blog.sina.com.cn/s/blog_7d49c18001010cqn.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询