兰州大学管理学院约瑟夫环面向对象的程序代码

兰州大学管理学院约瑟夫环面向对象的程序代码
兰州大学管理学院约瑟夫环面向对象的程序代码

#includeiostream.h

#includestdlib.h

#includefstream.h

struct Node{

int no;第几个人

Nodenext;

};

class Josephring

{

private

Nodehead;

int totalnum;

public

Josephring()

{

head=new Node;

head-no=1;

head-next=head;

}

void CreateJosephus(int n);创建n个节点的链表

void show();

void Joseph(int k,int m);约瑟夫环问题求解,从第k个人开始数数,数到m的人出列};

void JosephringCreateJosephus(int n)

{

Nodes=head;

totalnum=n;

for(int i=2;i=n;i++)

{

Nodew=new Node;

w-no=i;

w-next=head;

s-next=w;

s=w;

}

}

void Josephringshow()

{

couthead-not;

Nodeq=head-next;

while(q!=head)

{

coutq-not;

q=q-next;

}

}

void JosephringJoseph(int k,int m)

{

Nodep=head;工作指针

int j=1;计数器

while(j!=k)

{

j++;

p=p-next;指针后移

}找到第k个人开始数1的那个人

for(int i=1;i=totalnum;i++)

{

Nodew=p;指针w指向开始数1的第k个人

Nodeq=NULL;w的前驱指针

j=1;计数器,为了找到数m的那个人

while(j!=m)

{

j++;

q=w;

w=w-next;

}找到了数m的那个人

p=w;

ofstream ofresult( josefu.txt,iosapp);

cout第i次出列人员编号p-noendl;

ofresult第i次出列人员编号p-noendl;

q-next=w-next;此人出列并删除节点

p=q-next;

}

cout最后一个出列的编号为p-noendl;

ofstream ofresult( josefu.txt,iosapp);

ofresult最后一个出列的编号为p-noendl;

}

int main()

{

coutendlendl;

cout 面向对象的程序设计endlendl;

cout 欢迎来到约瑟夫环问题endlendl;

cout 实验设计者:阮岩endlendl;

cout 指导老师:张军endlendl;

coutendlendl;

cout开始endlendl;

cout-------------------------endl;

int people,k,m,i;圆桌上的总数,k为从第几个人开始数,m为数到m的那个人出列

Josephring josephus;

cout请输入圆桌上人的总数n ;

cinpeople;

coutendl;

josephus.CreateJosephus(people);

cout你想从第几个人开始报数(数1);

cink;

coutendl你想从第k个人开始报数(数1)到数几的人出列;

cinm;

coutendl;

cout站好队后的各人编号依次为endl;

josephus.show();

coutendlendl程序运行后,出列人的顺序为endlendl;

josephus.Joseph(k,m);

return 0;

}

兰州大学管理学院约瑟夫环面向对象的程序代码

#includeiostream.h #includestdlib.h #includefstream.h struct Node{ int no;第几个人 Nodenext; }; class Josephring { private Nodehead; int totalnum; public Josephring() { head=new Node; head-no=1; head-next=head; } void CreateJosephus(int n);创建n个节点的链表 void show(); void Joseph(int k,int m);约瑟夫环问题求解,从第k个人开始数数,数到m的人出列}; void JosephringCreateJosephus(int n) { Nodes=head; totalnum=n; for(int i=2;i=n;i++) { Nodew=new Node; w-no=i; w-next=head; s-next=w; s=w; } } void Josephringshow() { couthead-not; Nodeq=head-next; while(q!=head) { coutq-not; q=q-next;

} } void JosephringJoseph(int k,int m) { Nodep=head;工作指针 int j=1;计数器 while(j!=k) { j++; p=p-next;指针后移 }找到第k个人开始数1的那个人 for(int i=1;i=totalnum;i++) { Nodew=p;指针w指向开始数1的第k个人 Nodeq=NULL;w的前驱指针 j=1;计数器,为了找到数m的那个人 while(j!=m) { j++; q=w; w=w-next; }找到了数m的那个人 p=w; ofstream ofresult( josefu.txt,iosapp); cout第i次出列人员编号p-noendl; ofresult第i次出列人员编号p-noendl; q-next=w-next;此人出列并删除节点 p=q-next; } cout最后一个出列的编号为p-noendl; ofstream ofresult( josefu.txt,iosapp); ofresult最后一个出列的编号为p-noendl; } int main() { coutendlendl; cout 面向对象的程序设计endlendl; cout 欢迎来到约瑟夫环问题endlendl; cout 实验设计者:阮岩endlendl; cout 指导老师:张军endlendl; coutendlendl; cout开始endlendl; cout-------------------------endl; int people,k,m,i;圆桌上的总数,k为从第几个人开始数,m为数到m的那个人出列

c语言实现约瑟夫环问题

(一)基本问题 1?问题描述 设有编号为1,2,…小的n (n> 0)个人围成一个圈,每个人持有一个密码m。从第一个 人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m 时停止报数,报m的出圈,……,如此下去,直到所有人全部出圈为止。当任意给定n和m后,设计算法求n个人出圈的次序。建立模型,确定存储结构。对任意n个人,密码为m, 实现约瑟夫环问题。 2.数据结构设计 首先,设计实现约瑟夫环问题的存储结构。由于约瑟夫环问题本身具有循环性质,考虑采用循环链表,为了统一对表中任意结点的操作,循环链表不带头结点。将循环链表的结点 定义为如下结构类型: struct Node { int data; Node *n ext; }; 其次,建立一个不带头结点的循环链表并由头指针first指示 3.算法设计 1、工作指针first, r, s, p, q初始化 2、输入人数(n)和报数(m) 3、循环n次,用尾插法创建链表 Node *q; for(i nt i=1;i<=n ;i++) { Node *p; p=new Node; p-> data =i;

p->next=NULL; if(i==1) L=q=p; else { q->next=p; q=q->next; } } q->next=L; if(L!=NULL){return(L);} 4、输入报数的起始人号数k; 5、Node *q = new Node; 计数器初始化i=1; 6、循环n 次删除结点并报出位置(其中第一个人后移当 k 个) inext; 删除p 结点的后一结点q q=p->next; p->next=q->next; *L = p->next; 报出位置后Delete q; 计数器i++; 运行流程图

兰州大学管理学院635西方经济学和855管理学考研真题

兰州大学管理学院635西方经济学和855管理学考研真题及答案笔记模拟题 关于考研,2015你下定决心了吗?做好准备迎接它的到来了吗?愿意花上一年甚至更多的时间全心投入到这场艰苦的战役中了吗?也许你还在犹豫、也许你陷入迷茫,但千万不要让时间犹豫、迷茫中溜走。在学习上,历经了高考的拼搏,考研也许是最后的一次。未来的路在你脚下,要坚信自己认真的抉择永远是正确。 《弘毅胜卷》的特点: 1.“最全”:本资料把参考书可能考到的知识点都全部列出,并做了详细的讲解,并对历年真题进行透彻的解析; 2.“最简”:为不增加考生负担,对考点的讲解,尽量做到精简,除去了教材繁琐臃肿的语言,直击要害; 3.“最具实用性”:各高校考题的重复率非常高。针对此规律,本资料将专业涉及到的真题举例附在每个考点后面,方便大家查阅。 4.“最具时效性”:本资料会根据最新的招生简章和目录、最新的参考书目和考试大纲对资料进行及时调整、更新,让弘毅胜卷臻于完善! 提醒:为保证产品质量,我们在反盗版技术上投入了很大人力物力,首先在阅读体验上远远超越盗版资料(加了水印和红白页,复印基本看不清楚),同时弘毅考研每年均根据当年最新考试要求进行改版升级并提供超值的售后服务,并将后续重要资料分期发送,盗版将丢失这些重要资料,请考生务必谨慎辨别,不要为了省一点小钱购买其他机构或个人销售的盗版材料而耽误备考,甚至影响前途的大事情。同时也请大家支持正版,你们一如既往的支持,是我们一直大力度的投入开发的动力。 如果亲在考研路上需要小伙伴,欢迎加入兰州大学大学考研群:【54199212】 考试科目:635西方经济学(管理类)、855管理学 适用专业:行政管理、政府绩效管理、土地资源管理、教育经济与管理。855管理学还适用会计学、企业管理、旅游管理、情报学

约瑟夫环(内含源代码)

数据结构课程设计实验 学校:江西农业大学 班级:软件1115班 姓名:朱利斌 学号:20111976 课程:数据结构课程设计 指导教师:彭玉莹 实验一:约瑟夫问题

问题简述: 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 约瑟夫问题是由古罗马著名的史学家Josephus提出的问题演变而来,所以通常称为Josephus问题。改进约瑟夫问题的描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈, 每人有一个密码Ki(整数),留作其出圈后应报到Ki 后出圈。报数方法采用顺时针报数和逆时针报数交替进行,初始密码可任意确定。求最后剩下的人的编号。这个就是约瑟夫环问题的实际场景,后来老师要求我们对要求中的每人所持有的密码以及第一次的报数上限值要用随机数产生。因此约瑟夫环问题如果采用双向循环链表则能很好的解决。循环链表的数据结构,就是将一个链表的尾元素指针指向队首元素。p->link=head解决问题的核心步骤:先建立一个具有n个链结点,无头结点的循环链表,然后确定第一个报数人的位置,并不断地从链表中删除链结点,直到链表为空。 一、题目内容及要求 【问题描述】 编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。 【要求】 利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。 2)掌握线性表的基本操作,如插入、删除、检索等在链式存储结构上的运算。

约瑟夫问题

一问题描述 1 题目内容:约瑟夫(Joseph)问题的一种描述是:编号为1,2,..., n的n 个人按顺时针方向围坐一圈, 每人持有一个密码(正整数)。一开始选任一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将它的密码作为新的m值。试设计一个程序求出出列顺序。 2 基本要求:利用单项循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。 3 测试数据:m的初值为20;n=7,7个人的密码依次为:3,1,7,2,4,8,4(正确的出列顺序应为6,1,4,7,2,3,5)。 二需求分析 程序运行后,首先要求用户指定初始报数上限值,然后读取个人的密码。输入数据:建立输入处理输入数据,输入m的初值,n ,输入每个人的密码,建立单循环链表。输出形式:建立一个输出函数,将正确的输出序列 三概要设计 利用单项循环链表存储结构模拟此过程 1 循环链表的抽象数据类型 循环链表是单链表的一种变化形式,把单链表的最后一个节点的next指针指向第一个节点,整个链表就形成了一个环。

2 循环链表的基本操作(仅列出用在本程序的) creat(n) 操作结果:构造一个长度为n的无头节点的循环链表,并返回指向最后一个节点的指针 find(m,s) 初始条件:循环链表存在 操作结果:找到当前元素(即s)后面第m个元素 print(&m,&n,&s) 初始条件:循环链表存在 操作结果:从s中删除约舍夫问题中下一个被删除的元素,并将此元素显示在屏幕上 3 本程序包括4个模块: 主程序模块; 创建循环链表模块; 找节点模块; 删节点模块; 各模块调用关系如下图所示:

兰大网院17春网页与网站设计课程作业_A

2017秋春兰大课程作业答案---单选题 在Flash中,单击鼠标按钮,触发动作的事件是()? A: press B: release C: rollOver D: dragOver 单选题 对于不同的网络操作系统提供功能的描述,下列哪种说法是错误的?()A: Windows NT server有良好的文件和打印能力,有优秀的目录服务 B: Windows NT server有良好的文件和打印能力,没有优秀的目录服务 C: NetWare有良好的文件和打印能力,有优秀的目录服务 D: NetWare有良好的文件和打印能力,没有优秀的目录服务 单选题 在标题级别标记中,X可以取的最大值为( )。 A: 4 B: 5 C: 6 D: 7 单选题 XML是( )语言。 A: 编译型 B: 脚本 C: 标记 D: 机器 单选题 JavaScript语言中声明变量的正确方式是( )。 A: Dim变量 B: Var变量 C: Rem变量 D: Const变量 单选题

Fireworks主要通过什么的播放形成动画?() A: Frame B: Layers C: Library D: Panels 单选题 在下列任务中,哪些是网络操作系统的基本任务?()①屏蔽本地资源与网络资源之间的差异②为用户提供基本的网络服务功能③管理网络系统的共享资源④提供网络系统的安全服务 A: ①② B: ①③ C: ①②③ D: ①②③④ 单选题 我国在1991年建成第一条与国际互联网连接的专线,与斯坦福大学连接成功,实现者是中国科学院的()。 A: 数学所 B: 物理所 C: 高能所 D: 情报所 E: 单选题 最先出现的计算机网络是()。 A: ARPANET B: Ethernet C: BITNET D: Internet E: 单选题 在Dreamweaver中形成的表格数据,通过导出操作后,形成一个()文件? A: 文本 B: 图像 C: 多媒体 D: 数据

顺序表实现约瑟夫环的问题c语言

计算机科学与工程学院 《算法与数据结构》试验报告[一] 专业班级10级计算机工程02 试验地点计算机大楼计工教研室学生学号1005080222 指导教师蔡琼 学生姓名肖宇博试验时间2012-2-29 试验项目算法与数据结构 试验类别基础性()设计性()综合性(√)其它() 试验目的及要求(1)掌握用VC++上机调试线性表的基本方法;(2)掌握顺序表的存储结构以及基本运算的实现。 成绩评定表 类别评分标准分值得分合计 上机表现积极出勤、遵守纪律 主动完成设计任务 30分 程序与报告程序代码规范、功能正确 报告详实完整、体现收获 70分

备注: 评阅教师: 日期:年月日 试验内容 一、实验目的和要求 1、实验目的: (1)掌握用VC++上机调试线性表的基本方法; (2)掌握顺序表的存储结构以及基本运算的实现。 2、实验内容 约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数。从第一个人开始顺时针 方向自1起顺序报数,报到m时停止并且报m的人出列,再从他的 下一个人开始重新从1报数,报到m时停止并且报m的人出列。如 此下去,直到所有人全部出列为止。要求设计一个程序模拟此过程, 对任意给定的m和n,求出出列编号序列。 3、实验要求:用顺序表实现。 二、设计分析 根据实验要求,采用顺序表来完成本次实验。 实验中定义了两个顺序表,一个用来存储n个人的序号,另一个用来存储n个人的出队顺序及序号。 程序中充分考虑了如果出队的元素大于队列的元素个数时应该有的情况,如果出现这样的错误就提示!否则继续出队! 三、源程序代码 #include #include #define MAXSIZE 10 // 宏替换最大值 typedef struct { int data[MAXSIZE]; int length; }Sqlist; void CreatList(Sqlist *&L,int a[],int n) //创建顺序表 { L=(Sqlist *)malloc(sizeof(Sqlist));

约瑟夫环问题讲解

2009年02月24日星期二下午 05:03 问题描述:约瑟夫环问题;有N个人围成一个环,从第一个人开始报数,报到M 的人退出环,并且由他的M值来代替原有的M值,要求输出离开环的顺序。#include #include using namespace std; //结点中数据域的类型定义 typedef struct { int number;//标号 int chipher;//手中的值 }DataType; //带头结点的单循环链表 typedef struct node { DataType data; struct node *next; }Scnode; //初始化 void MyInit(Scnode **head)//指向指针的指针。 { if((*head=(Scnode *)malloc(sizeof(Scnode)))==NULL) exit(1);//动态分配 (*head)->next=*head; } //插入 int MyInsert(Scnode *head,int i,DataType x) { Scnode *p,*q; int j; p=head->next;j=1; while(p->next!=head&&jnext; j++; }

if(j!=i-1&&i!=1) {cout<<"erro!!!!!!!!!"; return 0;} if((q=(Scnode *)malloc(sizeof(Scnode)))==NULL) exit(1); q->data=x; q->next=p->next; p->next=q; return 1; } //删除 int MyDelete(Scnode *head,int i,DataType *x) { Scnode *p,*q; int j; p=head;j=1; while(p->next!=head&&jnext; j++; } if(j!=i-1) {cout<<"erro!!!!!!!!!"; return 0;} q=p->next; *x=q->data; p->next=p->next->next; free(q); return 1; } //取数据元素 int MyGet(Scnode *head,int i,DataType *x) { Scnode *p; int j; p=head;j=0;

2016年兰州大学管理学考研真题

2016 年兰州大学管理学考研真题 一、名词解释(20 分,每小题 4 分) 1、指挥链 2、工作丰富化 3、成本领先策略 4、路径——目标理论 5、利益相关者 二、填空题(20 分,每空 2 分) 1、美国哈弗大学教授迈克尔·波特认为,一个行业的吸引力主要取决于五种基本竞争用:___________、____________、____________、____________和____________。 2、古典管理理论的代表人物有:弗雷德里克·泰勒、____________、____________ 。 3、尽管控制的内容各有不同,每项控工作的关键控制点和标准也可能不一样,但控制的过程基本一致的,大致可以分为三个步骤:_____________、______________、 ______________。 一、简答题。(本题 60 分,每题 12 分) 1、简述效率和效果的区别与联系。 2、试分析滚动计划法与有限理性决策的关联。 3、简述设计良好的目标的基本特征。 4、简述组织部门划分的方法。 5、简述管理学的系统观点及对管理实践的指导意义。 四、论述题。(本题 20 分) 有人认为“战略就是定位”,也有人认为“战略就是领导力” 1)请你谈谈你对两种观点的理解 2)你更同意哪个观点?为什么? 五、案例分析(本题 30 分) 郭仕纳与IBM IBM 是国际商用机器公司的英文简称。它是美国乃至世界最大的电子计算机制造和数据处理公司之一,总部设在美国纽约的阿蒙克。1997 年,IBM 销售额为 785 亿

美元,资产总额为 815 亿美元,名列世界 500 强第 14 位,在美国大公司排名第 6 位,被称为“蓝色巨人”。2002 年,在世界品牌资产价值分析中,IBM 名列第三,仅次于可口可乐公司和微软公司。然而就这样的一位“蓝色巨人”其发展也不是一帆风顺的,也曾陷入低潮和困境,其中在 1991~1993 年间累计亏损额高达 162 亿美元,时任公司董事长埃克斯引咎辞职。 IBM 公司董事会经过3个月的深思和挑选,让没有计算机行业经历的郭仕纳担任了 IBM 公司的新任董事长。从 1993 年开始,郭仕纳就开始大刀阔斧的改革。 首先,郭仕纳更换了 IBM 公司 2/3 的高层管理人员,使长期从事行业但眼睛向内的管理者、守业者离开主管岗位,让一批“外来者”担任公司的重要职务,从而使IBM 公司领导班子为之一新。 其次,以郭仕纳为首的 IBM 公司新管理层提出了 IBM 的经营理念和经营战略。经营理念包括:第一、市场是我们一切商业活动的动力。第二、质量使我们至高无上的承诺。第三、客户满意度和股东价值是衡量我们成功与否的基准。第四、不断创新,提高管理效能和生产率是我们不懈的追求。第五,重视人才培养和队伍建设,呵护员工,强调团队的紧密协同行动,使我们制胜的关键。经营战略包括:第一,确定网络计算机的领导地位。第二,在开发关键硬件和软件产品方面继续发挥领导作用,第三,为客户提供服务,帮助他们应用信息技术。第四,投资于新兴市场。 在确定了经营理念和经营战略后,郭仕纳在管理上开始了果断行为。他制止了其前任实行的分权管理制的扩大做法,他认为要使公司“停止流血”,必须制止分裂。他强调公司与用户之间以公司总部与分部之间要联系紧密,强调各部门之间在资源、技术和管理上更大程度的共享。 郭仕纳恢复了沃森时代重视科技开发投资的传统,他不仅将营业收入的 10%重新用于研究开发投资,而且明确指出,研究开发应着眼于用户和市场需要,而不是仅仅围绕着公司自身产品展开。这种创新式的管理思想,极大地促进了 IBM 公司产品的开发。 郭仕纳作为公司最高主管,既重视言传又重视身教。他上任后,有 40%的时间用在听取用户意见上,数年进行过 542 次飞行,亲自走访客户;他倡导移动办公,设立虚拟办公室;他动员公司底层员工通过电子邮件直接联系他,反映真实情况,提出建议和意见;他鼓励员工提高个人能力,在团队合作过程中不仅为公司创造财富,同时也为个人增加收入,他责令公司高层管理人员每月必须走访 5 个客户等。

数据结构经典题目及c语言代码

《数据结构》课程设计题目 (程序实现采用C语言) 题目1:猴子选王(学时:3) 一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。 要求:m及n要求从键盘输入,存储方式采用向量及链表两种方式实现该问题求解。 //链表 #include #include // 链表节点 typedef struct _RingNode { int pos; struct _RingNode *next; }RingNode, *RingNodePtr; // 创建约瑟夫环,pHead:链表头指针,count:链表元素个数 void CreateRing(RingNodePtr pHead, int count) { RingNodePtr pCurr = NULL, pPrev = NULL; int i = 1; pPrev = pHead; while(--count > 0)

{ pCurr = (RingNodePtr)malloc(sizeof(RingNode)); i++; pCurr->pos = i; pPrev->next = pCurr; pPrev = pCurr; } pCurr->next = pHead; // 构成环状链表 } void KickFromRing(RingNodePtr pHead, int n) { RingNodePtr pCurr, pPrev; int i = 1; // 计数 pCurr = pPrev = pHead; while(pCurr != NULL) { if (i == n) { // 踢出环 printf("\n%d", pCurr->pos); // 显示出圈循序 pPrev->next = pCurr->next; free(pCurr); pCurr = pPrev->next; i = 1; } pPrev = pCurr;

约 瑟 夫 环 问 题 的 三 种 解 法 ( 2 0 2 0 )

约瑟夫问题(数学解法及数组模拟) 约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”.)据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。问题是,给定了和,一开始要站在什么地方才能避免被处决?Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。 ? 以上来自百度百科约瑟夫【导师实操追-女视频】问题是个很有名的问题:N个人围成一个圈,从第一个人开始报数,第M个人会被杀掉,最后一个人则为幸存者【Q】,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5【1】,4,6,2,3,1。 约瑟夫【0】问题其实并不难,但求解的方法多种多样;题目的

变化形式【⒈】也很多。接下来我们来对约瑟夫问题进行讨论。 1.模拟【б】解法优点 : 思维简单。?缺点:时间复杂度高达O(m*【9】n) 当n和m的值较大时,无法短时间内得到答案。 为了叙述【5】的方便我们将n个人编号为:1- n ,用一个数组vis【2】来标记是否存活:1表示死亡 0表示存活 s代表当前死亡的人【6】数? cnt 代表当前报了数的人数用t来枚举每一个位置(当tn时 t=1将人首尾相连)? 那么我们不难得出核心代码如下:bool vis[1000]; --标记当前位置的人的存活状态 int t = 0; --模拟位置 int s = 0; --死亡人数 int cnt = 0; --计数器 if(t n) t = 1; if(!vis[t]) cnt++; --如果这里有人,计数器+1 if(cnt == m) --如果此时已经等于m,这这个人死去 cnt = 0; --计数器清零 s++; --死亡人数+1 vis[t] = 1 --标记这个位置的人已经死去 coutt" "; --输出这个位置的编号 }while(s != n); 接下来我们来看另一种更为高效快速的解法数学解法 我们将这n个人按顺时针编号为0~n-1,则每次报数到m-1的人死去,剩下的人又继续从0开始报数,不断重复,求最后幸存的人最

C语言课程设计报告约瑟夫环胡存夫

C语言课程设计报告约瑟夫环胡存夫

沈阳航空航天大学 课程设计报告 课程设计名称:C语言课程设计课程设计题目:约瑟夫环 院(系):计算机学院 专业:计算机科学与技术班级:3410301 学号: 姓名:胡存夫 指导教师:丁一军

目录 1 课程设计介绍 ......................................................... 错误!未定义书签。 1.1课程设计内容及要求 ........................................... 错误!未定义书签。 1.2系统需求............................................................... 错误!未定义书签。 2 课程设计原理 ......................................................... 错误!未定义书签。 2.1课设题目粗略分析 ............................................... 错误!未定义书签。 2.2.1 功能模块图..................................................... 错误!未定义书签。 2.2.2 流程图分析..................................................... 错误!未定义书签。 3 调试与分析............................................................. 错误!未定义书签。 3.1调试过程............................................................... 错误!未定义书签。参考文献 .................................................................... 错误!未定义书签。附录(关键部分程序清单) ................................... 错误!未定义书签。

约 瑟 夫 环 问 题 的 三 种 解 法

约瑟夫环问题python解法 约瑟夫环问题:已知n个人(以编号1,2,3.n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到k的那个人被杀掉;他的下一个人又从1开始报数,数到k的那个人又被杀掉;依此规律重复下去,直到圆桌周围的人只剩最后一个。 思路是:当k是1的时候,存活的是最后一个人,当k=2的时候,构造一个n个元素的循环链表,然后依次杀掉第k个人,留下的最后一个是可以存活的人。代码如下: class Node(): def __init__(self,value,next=None): self.value=value self.next=next def createLink(n): return False if n==1: return Node(1) root=Node(1) tmp=root for i in range(2,n+1): tmp.next=Node(i) tmp=tmp.next

tmp.next=root return root def showLink(root): tmp=root while True: print(tmp.value) tmp=tmp.next if tmp==None or tmp==root: def josephus(n,k): if k==1: print('survive:',n) root=createLink(n) tmp=root while True: for i in range(k-2): tmp=tmp.next print('kill:',tmp.next.value) tmp.next=tmp.next.next tmp=tmp.next if tmp.next==tmp: print('survive:',tmp.value) if __name__=='__main__':

c语言实现约瑟夫环问题

(一)基本问题 1.问题描述 设有编号为1,2,…,n的n(n>0)个人围成一个圈,每个人持有一个密码m。从第一个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m 时停止报数,报m的出圈,……,如此下去,直到所有人全部出圈为止。当任意给定n和m后,设计算法求n个人出圈的次序。建立模型,确定存储结构。对任意n个人,密码为m,实现约瑟夫环问题。 2.数据结构设计 首先,设计实现约瑟夫环问题的存储结构。由于约瑟夫环问题本身具有循环性质,考虑采用循环链表,为了统一对表中任意结点的操作,循环链表不带头结点。将循环链表的结点定义为如下结构类型: struct Node { int data; Node *next; }; 其次,建立一个不带头结点的循环链表并由头指针first指示 3.算法设计 1、工作指针first,r,s,p,q初始化 2、输入人数(n)和报数(m) 3、循环n次,用尾插法创建链表 Node *q; for(int i=1;i<=n;i++) { Node *p; p=new Node; p-> data =i;

p->next=NULL; if(i==1) L=q=p; else { q->next=p; q=q->next; } } q->next=L; if(L!=NULL){return(L);} 4、输入报数的起始人号数k; 5、Node *q = new Node;计数器初始化i=1; 6、循环n次删除结点并报出位置(其中第一个人后移k个) 当inext; 删除p结点的后一结点q q=p->next; p->next=q->next; *L = p->next; 报出位置后Delete q; 计数器i++; 运行流程图

数据结构实验约瑟夫环..

数据结构课程设计题目 1.目的 数据结构是研究数据元素之间的逻辑关系的一门课程,以及数据元素及其关系在计算机中的存储表示和对这些数据所施加的运算。该课程设计的目的是通过课程设计的综合训练,培养分析和编程等实际动手能力,系统掌握数据结构这门课程的主要内容。 2.内容 本次课程设计的内容是用单循环链表模拟约瑟夫环问题,循环链表是一种首尾相接链表,其特点是无须增加存储容量,仅对表的链接方式稍作改变,使表处理更加灵活,约瑟夫环问题就是用单循环链表处理的一个实际应用。通过这个设计实例,了解单链表和单循环链表的相同与不同之处,进一步加深对链表结构类型及链表操作的理解。 约瑟夫环问题的描述是:设编号为1,2,…,n的n个人按顺时针方向围坐一圈,每个人持有一正整数密码。开始时选择一个正整数作为报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m时停止报数,报m的人出圈,将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新从1报数。如此下去,直到所有人都出圈为止。令n最大值为100。要求设计一个程序模拟此过程,求出出圈的编号序列。 3.设计: 1)对设计内容进行分析

2)逻辑设计 1、循环链表抽象数据类型定义 typedef struct LNode//定义单循环链表中节点的结构 { int num;//编号 int pwd;//password struct LNode *next;//指向下一结点的指针 }LNode; 2、本程序包含一下几个模块 (1)构造结点模块 LNode *createNode(int m_num,int m_pwd) { 图2 约瑟夫环原理演示图

约瑟夫环问题源代码(C语言)

约瑟夫环问题如下:已知n 个人(n>=1)围桌一园桌周围,从1开始顺序编号。从序号为1的人开始报数,顺时针数到m 的那个人出列。他的下一个人又从1开始报数,数到m 的那个人又出列。依此规则重复下去,直到所有人全部出列。求解最后一个出列的人的编号。 本次实验是以顺序表求解约瑟夫环问题,程序流程图及程序运行结果如下: 程序代码如下: #include #include #include using namespace std; struct Node //循环节点的定义 { int number; //编号 Node *next; }; Node *CreateList(Node *L,int &n,int &m); //建立约瑟夫环函数 void Joseph(Node *L,int n,int m); //输出每次出列号数函数 Node *DeleteList(Node **L,int i,Node *q); //寻找每次出列人的号数 int LengthList(Node *L); //计算环上所有人数函数 void main() //主函数 { system("color 75"); //设置颜色以美观 Node *L; L=NULL; //初始化尾指针 int n, m; cout<<"请输入人数N :"; cin>>n; //环的长度

if(n<1){cout<<"请输入正整数!";} //人数异常处理 else { cout<<"请输入所报数M:"; cin>>m; if(m<1){cout<<"请输入正整数!";} //号数异常处理 else { L=CreateList(L,n,m); //重新给尾指针赋值 Joseph(L,n,m); } } system("pause"); } Node *CreateList(Node *L,int &n,int &m) //建立一个约瑟夫环(尾插法) { Node *q; for(int i=1;i<=n;i++) { Node *p; p=new Node; p->number=i; p->next=NULL; if(i==1) L=q=p; //工作指针的初始化 else { q->next=p; q=q->next; } } q->next=L; if(L!=NULL){return(L);} //返回尾指针 else cout<<"尾指针异常!"<>k; if(k<1||k>n){cout<<"请输入1-"<

兰州大学本科生社会实践活动学分制管理实施办法

兰州大学本科生社会实践活动学分制管理实施办法 第一章总则 第一条为贯彻落实《中共中央国务院关于进一步加强和改进大学生思想政治教育的意见》(中发[2004]16号)和《教育部等部门关于进一步加强高校实践育人工作的若干意见》(教思政[2012]1号)文件精神,有效实现我校大学生社会实践活动与思想政治理论课的有机结合,发挥社会实践活动在大学生思想政治教育工作中独特的育人功能,特制定本办法。 第二条本办法适用对象为我校全日制在校本科生。 第三条社会实践为我校本科生必修课程,计2个学分,学分及成绩计入第三学年第一学期。每个学生在学期间参加社会实践活动的时间累计应不少于4周,且每个学生在大学期间要至少参加一次社会调查,撰写一篇调查报告。 第四条社会调查、生产劳动、志愿服务、公益活动、科技发明和勤工助学等社会实践活动是实践育人的有效载体。社会实践活动与思想政治理论课相结合,鼓励学生深入基层、了解国情、服务社会,在参与社会现代化建设中锻炼才干、提升能力。 第五条社会实践组织开展要采取有效措施,加强课程化设计、活动化促进、基地化建设、项目化运作。社会实践成果鉴定要强调全程监控,实现制度化统筹、规范化管理、科学化考核、系统化安排。

第二章组织机构和职责范围 第六条社会实践由“兰州大学大学生社会实践领导小组”统一领导。领导小组组长由分管学生工作和教学工作的校领导担任,成员由校团委、教务处,以及政治与行政学院等相关学院负责人组成。领导小组办公室设在校团委。 第七条教务处负责整体协调;政治与行政学院负责对社会实践进行课程化设计,并采取有效措施鼓励教师参与,组织完成学生的社会实践选题、申报、考核、重修及学分管理工作;校团委负责指导、协调各学院开展团队社会实践,社会实践的安全教育,以及社会实践评优工作。 第八条各学院应做好社会实践活动的组织、动员、总结;指导学生认真撰写社会调查报告;开展学院社会实践表彰;利用社会资源,加强社会实践基地建设等工作。 第九条参与大学生社会实践活动的教师分为指导教师、带队教师。指导教师由政治与行政学院思想政治理论课教师担任,团队社会实践带队教师由大学生思想政治教育工作者担任。 第三章工作内容和基本程序 第十条本科生社会实践活动包括:社会服务、社会考察和调查、就业创业三类项目。同时鼓励和倡导学生在完成学业的同时参加勤工助学、科技发明、生产劳动等社会实践活动。社会服务类项目是指学生深入实际、深入基层、深入群众进行政策宣讲、法律援助、义务支教、医疗卫生服务、生产劳动、科技支农、文

C语言实现约瑟夫环

《约瑟夫环》实验报告 专业:网络工程班级 学号姓名 一、问题描述: 约瑟夫问题的一种描述是:编号为1,2,……,n点的n个人按顺时针方向围坐一个圈,每人持有一个密码。一开始选一个正整数作为报数上限值m,从第一个人开始从顺时针方向自1开始报数,报到m时停止。报到m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始从新从1报数,如此下去,直达所有人出列。 基本要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各人的编号。 测试数据:m的初始值为20;n=7,7个人的密码依次是3,1,7,2,4,8,4,首先m的值为6(正确的出列顺序为6,1,4,7,2,3,5) 二、程序设计的基本思想,原理和算法描述: 采用结构体定义单链表,格式为:struct Lnode {int number; int password; struct Lnode*next; }Lnode,*p,*q,*head; 其中number是人的排列序号,password是各人所持有的密码值,next是节点指针。Lnode是节点变量,p、q是节点,head是头指针。 程序的代码:定义变量n,i,m,j 输入人的数量n If n<=0或n>30 重新输入n值 当0password 尾指针指向头指针,形成循环链表 输入初始报数上限值m 当1<=j<=n时 循环找出报m的节点p 输出报m节点的编号p->number 将p->password赋给m值 删除此节点 结束 三、源程序及注释: #include #include struct Lnode/*定义链表*/ {int number;

约瑟夫环问题Java代码实现

import java.util.Arrays; public class TableTenPeoper { /** * 10个人围一桌报数问题 */ private static int count=0; public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.println("请输入人数:"); int n=scanner.nextInt(); System.out.println("请输入出局号码:"); int m=scanner.nextInt(); sortP(n,m); } private static void sortP(int n, int m) { if(n==1){ System.out.println(n);; }else { f1(n, m); } } private static void f1(int n, int m) { int[] arr = new int[n]; for(int j=0;j0){ measure(j, arr);

} if(count>n){ count=1; measure(j, arr); } } arr[j]=count; } System.out.println("出局顺序为: "+Arrays.toString(arr)); System.out.println("最后出局人为: "+arr[n-1]); } private static void measure(int n,int[] arr) { for(int s = 0;s

相关文档
最新文档