早教吧作业答案频道 -->其他-->
跪求!C++!利用循环链表实现约瑟夫问题的求解约瑟夫问题如下:已知n个人(n>=1)围坐一圆桌周围,从1开始顺序编号。从序号为1的人开始报数,顺时针数到m的那个人出列;他的下一
题目详情
跪求! C++ ! 利用 循环链 表实现 约瑟夫 问题的求解
约瑟夫问题如下: 已知n个人(n>=1)围坐一圆桌周围,从1开始顺序编号。从序号为1的人开始报数,顺时针数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规则重复下去,直到所有人全部出列。请问最后一个出列的人的编号。 ( 最好能帮我把关键算法注释一下)
约瑟夫问题如下: 已知n个人(n>=1)围坐一圆桌周围,从1开始顺序编号。从序号为1的人开始报数,顺时针数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规则重复下去,直到所有人全部出列。请问最后一个出列的人的编号。 ( 最好能帮我把关键算法注释一下)
▼优质解答
答案和解析
#include
struct Node
{
int data;
Node *next;
};
void main()
{
int n,k,m,i,s;
Node *p,*q,*head;
cout< cin>>n;
cout< cin>>k;
cout< cin>>m;
head=new Node; //确定头结点
p=head;
for(i=1;i<=n-1;i++) //赋初值
{
p->data=i;
p->next=new Node; //为下一个新建内存
p=p->next;
}
p->data=n; //最后一个单独处理
p->next=head; //指向头,形成循环链表
p=head;
while(p->data!=(p->next)->data) //p->data==(p->pNext)->data表示只剩下一个结点的
{
while(p->data !=k) //寻找编号为k的结点
p=p->next;
s=1;
if(m==1)
{
for(i=1;i {
cout<data< p=p->next ;
}
cout<data< break;
}
else
{
while(p!=p->next)
{
for(i=1;i p=p->next;
q=p->next;
cout<data< p->next=q->next;
p=p->next;
delete q;
s++;
}
cout<data< delete p;
}
}}
/*这是今天刚做的,你看看应该可以吧,是C++的*/
struct Node
{
int data;
Node *next;
};
void main()
{
int n,k,m,i,s;
Node *p,*q,*head;
cout< cin>>n;
cout< cin>>k;
cout< cin>>m;
head=new Node; //确定头结点
p=head;
for(i=1;i<=n-1;i++) //赋初值
{
p->data=i;
p->next=new Node; //为下一个新建内存
p=p->next;
}
p->data=n; //最后一个单独处理
p->next=head; //指向头,形成循环链表
p=head;
while(p->data!=(p->next)->data) //p->data==(p->pNext)->data表示只剩下一个结点的
{
while(p->data !=k) //寻找编号为k的结点
p=p->next;
s=1;
if(m==1)
{
for(i=1;i
cout<data<
}
cout<data<
}
else
{
while(p!=p->next)
{
for(i=1;i
q=p->next;
cout<data<
p=p->next;
delete q;
s++;
}
cout<data<
}
}}
/*这是今天刚做的,你看看应该可以吧,是C++的*/
看了 跪求!C++!利用循环链表实...的网友还看了以下:
猴子选大王n只猴子围坐成一个圈,按顺时针方向从1到n编号.然后从1号猴子开始沿顺时针方向从1开始报 2020-05-16 …
c语言程序编写(初学)(1)利用公式e≈1+1/1!+1/2!+1/3!+…+1/n!,编程序求e 2020-05-17 …
按层次次序将一棵有n个结点的完全二叉树的所有结点从1到n编号,当i≦(n-1)/2时,编号i的结 2020-05-23 …
( 13 ) 按层次次序将一棵有 n 个结点的完全二叉树的所有结点从 1 到 n 编号 ,当 i<n 2020-05-23 …
1.n对夫妇任意在一排2n个椅子上就坐..求“有夫妇不相邻的”的概率2.n对夫妇任意在圆桌首尾相连 2020-06-27 …
定义:我们把阶乘的定义引申,定义n!!=n(n-2)(n-4)…,若n为偶数,则乘至2,反之,则乘 2020-07-17 …
用java编写程序,新手小题2(急)设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进 2020-11-17 …
一高中数学问题N个人在操场里围成一圈,将这N个人按顺时针方向从1到N编号,然后从第一个人起每隔一个人 2020-11-24 …
几个简单的matlab程序编写~~求帮助·(1)编写函数编写一函数求输入两个正整数m和n,求其最大公 2020-12-08 …
某电视节目中,邀请了n对夫妻,编号1.2.3.n,把编号为1.2.3.n的n个妻子眼睛蒙上,让他们每 2021-01-02 …