约瑟夫环问题求解利用单循环链表作为存储结构模拟此过程

要求键盘输入总人数,初始报数上限值m及各人密码,按照出列顺序输出各人编码... 要求键盘输入总人数,初始报数上限值m及各人密码,按照出列顺序输出各人编码 展开
 我来答
白怀彬
2011-12-21
知道答主
回答量:47
采纳率:0%
帮助的人:26.4万
展开全部
#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);
}
更多追问追答
追问
运行的时候有错误 说是Error spawning cl.exe
怎么回事呢
追答
不会啊!我刚运行过的!
你用的是VC6.0么?
看看是不是有正在运行着的对话框!!
如果有的话,关了!
匿名_热心网友
2012-01-04 · TA获得超过719个赞
知道大有可为答主
回答量:3827
采纳率:0%
帮助的人:8565万
展开全部
先想好你想要的对应关系是什么样子的对应,数组b会不会变动?如果数组b不变而且a数组中的值限定在你设定的值内的话,就直接根据数组a元素的值去查找数组b就可以了,比如a[i] = 8;那么你要的值就是b[8-1],或者写成b[a[i]-1].
如果是这样“对应”的话,a中的重复项将对应到b中的同一个项。没问题。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
V亮剑
2011-12-23 · TA获得超过288个赞
知道小有建树答主
回答量:263
采纳率:0%
帮助的人:98.6万
展开全部
参考这个经典代码,自己顺便再学习一下
http://blog.sina.com.cn/s/blog_7d49c18001010cqn.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式