2.约瑟夫环的实现:设有n个人围坐在圆桌周围,现从某个位置 i 上的人开始报数,数到
1.任意输入队列长度和队列中的元素值,构造一个顺序循环队列,对其进行清空、插入新元素、返回队头元素以及删除队头元素操作.
2.约瑟夫环的实现:设有n个人围坐在圆桌周围,现从某个位置 i 上的人开始报数,数到 m 的人就站出来.下一个人,即原来的第m+1个位置上的人,又从1开始报数,再是数到m的人站出来.依次重复下去,直到全部的人都站出来,按出列的先后又可得到一个新的序列.由于该问题是由古罗马著名的史学家Josephus提出的问题演变而来,所以通常称为Josephus
例如:当n=8,m=4,i=1时,得到的新序列为:
4,8,5,2,1,3,7,6
编写程序选择循环队列作为存储结构模拟整个过程,并依次输出出列的各人的编号.
数据结构的实验谢谢
人气:401 ℃ 时间:2020-12-13 18:31:41
解答
约瑟夫问题:
#include
struct Node
{
int data;
Node *pNext;
};
void main()
{
int n,k,m,i;
Node *p,*q,*head;
coutn;
coutk;
coutm;
head=(Node*)new Node; //确定头结点
p=head;
for(i=1;idata=i;
p->pNext=(Node*)new Node; //为下一个新建内存
p=p->pNext;
}
p->data=n; //最后一个单独处理
p->pNext=head; //指向头,形成循环链表
p=head;
while(p->data!=(p->pNext)->data) //p->data==(p->pNext)->data表示只剩下一个结点的
{
while(p->data !=k) //寻找编号为k的结点
p=p->pNext;
if(m==1)
{
for(i=1;i
推荐
- 数量题 30人围坐在一起轮流表演节目,他们按顺序从1到3依次不重复地报数,数到3的人出来表演节目
- 1.设有n个人围做在圆桌周围,从某个位置开始用自然数进行编号为1,2….,n.然后从编号为k的人从1开始报数,
- 约瑟夫环 已知n个人围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列,m是什么
- 约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1— n),从第1号开始报数,一直数到m,数到m
- 约瑟夫环已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.数组方法,急
- 16分之12×25分之12=?我算了好多遍,怎么结果都不一样?要有算式和过程!
- 爸爸妈妈我想回家和你们一起过年英语怎么读
- 寄生关系的生物有哪些
猜你喜欢