约瑟夫环问题
一、实验内容
本实验利用单向循环链
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
模拟约瑟夫环问题(编号为1,2,…,n的n个人按顺时针方向围坐一圈,没人持有一个密码(正整数)。开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始报数,报到m是停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止),按照出列顺序印出个人的编号。M的初值为20,n=7,7个人的密码依次为3,1,7,2,4,8,4,首先m值为6。
二、源程序
#include
#include //getch();
/*write: Han.JH*/
static int people_number_count;
typedef struct People_Node
{
int Password_Data,people_number;
struct People_Node *next;
}People_Node,*People_LinkList;
void GreatList(People_LinkList &L)
{
People_Node *s,*r; int flag=1;int Password;
L=new People_Node;
L->next=NULL;
r=L;
while(flag==1)
{
cout<<"输入每个人的密码,以回车作间隔,'0'表示结束:";
cin>>Password;//输入每个人的密码;
if(Password!=0)
{
s=new People_Node;
s->Password_Data=Password;
people_number_count++; //对人的编号
s->people_number=people_number_count;
r->next=s;
r=s;
}
else
{ r->next=L->next;
flag=0;
}
}
}
void GetList(People_LinkList &L)
{
People_Node *r;
int m,k;int count=0;
cout<<"输入报数上限值m:";
cin>>m;
r=L;
cout<<"出列排序:";
while(count!=people_number_count)
{ //则所有人以出列,结束循环
for(k=1;k<=m-1;k++)
{
r=r->next;
}
count++;
m=r->next->Password_Data;
cout<<"["<next->people_number<<"]";
r->next=r->next->next;
}
}
void main()
{
People_LinkList L;
void GreatList(People_LinkList &);
void GetList(People_LinkList &);
cout<<"++++++++++++约瑟夫环问题+++++++++++"<
本文档为【实验报告1约瑟夫环】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。