作业帮 > 综合 > 作业

采用链表解决约瑟夫问题:有n个人围坐在一起形成头尾相接的一个环,从第m个人开始报数,每次有人数到r时,

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 10:53:49
采用链表解决约瑟夫问题:有n个人围坐在一起形成头尾相接的一个环,从第m个人开始报数,每次有人数到r时,
这个人就离开.请输出所有人的离队顺序.
/*
有n个人围坐在一起形成头尾相接的一个环,从第m个人开始报数,每次有人数到r时,zhe
*/
#include
using namespace std;
// 表示一个犯人的结构体
struct Prisoner
{
// 编号
int id;
// 密码
int pass;
// 用于链表的指针
struct Prisoner * pre;
struct Prisoner * next;
};
class JosephCircle
{
public:
// 基本的约瑟夫构造函数
JosephCircle(int N,int M,int R);
// 输出约瑟夫环
void print();
// 开始处决犯人
void start();
private:
int N,M,R;
// 约瑟夫环的头指针
struct Prisoner * head;
// 第一个被处决的犯人的节点指针
struct Prisoner * firstPunishedPrision;
};
JosephCircle::JosephCircle(int N,int M,int R)
{
this->N = N;
this->M = M;
this->R = R;

struct Prisoner * p , *pr;
// 约瑟夫环的头指针初始化为空
this->head = NULL;
// 构造一个由 N 个犯人组成的约瑟夫环
for(int i=1;ihead == NULL)
{
// 新增一个犯人
p = new struct Prisoner();
// 犯人编号
p -> id = i;
// 犯人密码
p -> pass = R;
// 紧挨着的下一个犯人(因为是环状的,每个人都会有紧挨着的其他犯人)
p -> pre = p;
p -> next = p;
// 约瑟夫环的头指针
this->head = pr = p;
}
else
{
p = new struct Prisoner();
p -> id = i;
p -> pass = R;
p -> pre = pr;
p -> next = pr->next;

pr -> next -> pre = p;
pr -> next = p;

pr = p;
}
}

// 寻找约瑟夫环里面第一个被处决的犯人的【节点指针】
firstPunishedPrision = head;
for(int i=2;ifirstPunishedPrision = this->firstPunishedPrision -> next;
}
}
// 输出约瑟夫环
void JosephCircle::print()
{
cout pre = q -> pre;
p = p -> next;
// 输出被处决的犯人的信息
cout
采用链表解决约瑟夫问题:有n个人围坐在一起形成头尾相接的一个环,从第m个人开始报数,每次有人数到r时, 约瑟夫环 已知n个人围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列,m是什么 2.约瑟夫环的实现:设有n个人围坐在圆桌周围,现从某个位置 i 上的人开始报数,数到 求做一个C语言题目约瑟夫问题.M个人围成一个圈,从第一个人开始报数,数到N的人出圈,再由下一个人开始报数,数到N的人出圈 设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人 C 设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一 约瑟夫问题:M个人围成一圈,从第一个人开始依次从1到N循环报数,每当报数为N时此人出圈,直到剩一人为止 /*3、约瑟夫问题约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到 vb求约瑟夫问题的求解:有n个人围成一个圈,由第一个人开始报数,数到第k个人,这个人 c语言:有n个人围成一圈,按顺序编号.从第1个人开始报数,数到m时该人退出,并且下一个从1重新开始报数. 原始的Joseph问题的描述如下:有n个人围坐在一个圆桌周围,把这n个人依次编号为1,……,n.从编号是1 的人开始报数 约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1— n),从第1号开始报数,一直数到m,数到m