首页 / 算法 / 编写算法解决Josephus问题:设有n个人围在一个圆桌周围,现从第s个人开始报数,数到第m个人又出列…如此反复直到所有的人全部出列为只止。 Josephus问题是:对于任意给定的n,s和m,求出按出列次序得到的n个人员的序列。
编写算法解决Josephus问题:设有n个人围在一个圆桌周围,现从第s个人开始报数,数到第m个人又出列…如此反复直到所有的人全部出列为只止。 Josephus问题是:对于任意给定的n,s和m,求出按出列次序得到的n个人员的序列。
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了编写算法解决Josephus问题:设有n个人围在一个圆桌周围,现从第s个人开始报数,数到第m个人又出列…如此反复直到所有的人全部出列为只止。 Josephus问题是:对于任意给定的n,s和m,求出按出列次序得到的n个人员的序列。,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1326字,纯文字阅读大概需要2分钟。
内容图文
//约瑟夫环
#include <stdio.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct Lnode
{
ElemType data;
struct Lnode *next;
}Lnode,*Linklist;
Status CreatList(Linklist &L,int n)//建立一个循环单链表 ,每个结点的数据为它对应的序号
{
L=(Linklist)malloc(sizeof(Lnode));
L->next=NULL;
Linklist p,s;
p=(Linklist)malloc(sizeof(Lnode));
p=L;
int i;
for(i=1;i<=n;i++)
{
s=(Linklist)malloc(sizeof(Lnode));
s->data=i;
s->next=NULL;
p->next=s;
p=s;
}
p->next=L->next;
return OK;
}
Linklist LocateNode(Linklist L,int s)//找到起始结点的前驱结点的位置
{
Linklist p=L;
int i=0;
while(p)
{
if(++i==s)
return p;
p=p->next;
}
return NULL;
}
void JosephusGame(Linklist L,int s,int m)//s表示起始位置,m表示循环数
{
int count=0;//计数点
Linklist p,q;
p=LocateNode(L,s);//q为p的后继结点
if(NULL==p)
printf("Linklist is empty !");
q=p->next;
while(q!=p)//链表中还剩不止一个结点
{
if(0==(++count)%m)//找到符合退圈的结点
{
printf("%d ",q->data);
p->next=q->next;
free(q);
q=p->next;
continue;
}
p=p->next;
q=p->next;
}
printf("%d\n",q->data);
}
int main()
{
Linklist L;
int n,s,m;
scanf("%d%d%d",&n,&s,&m);
CreatList(L,n);
JosephusGame(L,s,m);
return 0;
}
原文:https://www.cnblogs.com/Liu-xing-wu/p/11027837.html
内容总结
以上是互联网集市为您收集整理的编写算法解决Josephus问题:设有n个人围在一个圆桌周围,现从第s个人开始报数,数到第m个人又出列…如此反复直到所有的人全部出列为只止。 Josephus问题是:对于任意给定的n,s和m,求出按出列次序得到的n个人员的序列。全部内容,希望文章能够帮你解决编写算法解决Josephus问题:设有n个人围在一个圆桌周围,现从第s个人开始报数,数到第m个人又出列…如此反复直到所有的人全部出列为只止。 Josephus问题是:对于任意给定的n,s和m,求出按出列次序得到的n个人员的序列。所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。