文档库 最新最全的文档下载
当前位置:文档库 › 约瑟夫生者死者游戏

约瑟夫生者死者游戏

约瑟夫生者死者游戏
约瑟夫生者死者游戏

课程设计报告

约瑟夫生者死者游戏

学生姓名:

专业:

班级:

学号:

指导教师:

2017年3月29日

目录

一、实验题目 (2)

二、实验目的 (2)

三、实验要求 (2)

四、实现过程 (3)

1、总体设计: (3)

2、详细设计: (4)

3、调试分析: (8)

4、运行结果: (9)

5、实验总结: (11)

五、参考文献 (11)

一、实验题目

约瑟夫生者死者游戏

二、实验目的

本次课程设计的主要目的是综合运用所学的数据结构知识解决Jonsepu环问题,侧重对循环链表等相关内容的综合应用,使自己能进一步熟悉掌握数据结构的基础知识,进一步提升自己的解决问题和编程调试能力,为后续专业课程的学习打下良好的基础。

三、实验要求

设计要求

本游戏的数学建模如下:假设n个旅客排成一个环形,依次顺序编号1,2,…,n。从某个指定的第1号开始,沿环计数,每数到第m个人就让其出列,且从下一个人开始重新计数,继续进行下去。这个过程一直进行到剩下k个旅客为止。

本游戏的要求用户输入的内容包括:

1. 旅客的个数,也就是n的值;

2. 离开旅客的间隔数,也就是m的值;

3. 所有旅客的序号作为一组数据要求存放在某种数据结构中。

本游戏要求输出的内容是包括

1. 离开旅客的序号;

2. 剩余旅客的序号;

四、实现过程

1、总体设计:

1.主流程图:

2.Out函数流程图

2、详细设计:

1.结构体

typedef struct Jonse/*定义结构体*/

{

int code;/*编号(分配位置)*/

struct Jonse *next;

}jonse;

2.链表的构造函数

jonse * Create(int n)/*建立n个节点的单向循环链表函数*/ {

Jonse *h,*p;

int i;

h=(Jonse *)malloc(sizeof(Jonse));/*为头结点分配空间*/ p=h;

for(i=1;i<=n;i++)/*建立n个节点的单向链表*/

{

p->code=i;

if(i

{

p->next=(Jonse *)malloc(sizeof(Jonse));/*创建新节点*/

p=p->next;

}

}

p->next=h;/*返回头结点,完成单向循环链表的建立*/ return h;

}

3.输出链表的函数

void ShowList(Jonse *h)/*打印链表函数*/

{

Jonse *p;

p=h;

do

{

printf("%d\t",p->code);

p=p->next;

}while(p!=h);

}

4.实现将人剔除的函数

void Out(Jonse *h,int i,int d,int s)/*出队函数*/ {

int c;

c=s;

Jonse *p,*q;

int k;

p=h;

for(q=h;q->next!=h;q=q->next);/*初始化链表*/

for(k=1;k

{

q=p;p=p->next;

}

while(p!=p->next)/*循环删除队列结点*/

{

for(k=1;k

{

q=p;

p=p->next;

}

printf("%d ",p->code);/*输出被踢节点的位置*/

q->next=p->next;

free(p);/*释放被踢出的结点*/

p=NULL;/*让p指针赋值为空指针*/

p=q->next;

flag++;

if(num-flag==c)break;

}

printf("\n剩余游客的编号:\n");

//free(p);/*释放被踢出的结点*/

p=NULL;/*让p指针赋值为空指针*/

p = h;

do

{

printf("%d ",p->code);

p=p->next;

}while(p!=h);

printf("\n");

}

3、调试分析:

程序的编写和调试基本正常。遇到的问题主要是:链表的指向的边界问题。本实验采用数据抽象与模块化程序设计方法,思路清晰,实验时调试顺利,各模块具有很好的可重用性,得到了一次良好的程序设计训练。

本实验算法是使用循环链表的方法,由于这种方法在删除一个节点后对其他节点的位置改动放不大,所以很浪费时间,每次都删除第m个数字,都要用O(m)的时间,一共有n个数字,想要剩下一个,其余都要删除,那么就要用(n-1)*O

(m)的时间,所以算法的时间复杂度为O(mn)。还可以用数组来实现本实验,减少时间的浪费。

4、运行结果:

1.要求输入参与者的总人数:

2.打印出创建好的链表,并提示输入开始报数的位置:

3.输入报数人所在的位置,并提示输入报数的最大值:

4.输入报数的最大值,并提示输入留下的人数:

5.输入留下人数,计算显示结果:结果为删除的人所在的位置

和留下的人数:

5、实验总结:

通过本次课程设计的锻炼,使我对数据结构又有了许多新的深刻认识,更深的理解了数据结构的难点,并且通过这次课程设计,我把以前认为没有实际用途的知识转化为了实际问题来解决,非常有意思,同时也觉得这种学习方法,更好的提高学习的效率,以下就是我做这次课程设计的主要体会:

一方面,在程序设计语言中,每一个数据都属于某种数据类型。类型明显或隐含地规定了数据的取值范围、存储方式以及允许进行的运算。另一方面,在程序设计过程中,当需要引入某种新的数据结构时,总是借助编程语言所提供的数据类型来描述数据的存储结构。

同时,做好课程设计更能体现出同学的学习态度,对于新知识的渴望与追求,能够反映出同学对自己负责任的态度。

五、参考文献

[1] 严蔚敏,吴伟民,《数据结构》,北京:清华大学出版社,2006年

[2]苏小红,《C语言程序设计》(第3版)2015年

六、附录

#include

#include

typedef struct Jonse/*定义结构体*/

{

int code;/*编号(分配位置)*/

struct Jonse *next;

}jonse;

jonse * Create(int n);

void ShowList(Jonse *);

void Out(Jonse *,int,int,int);

int flag,num;

/*主函数*/

main()

{

Jonse *head;

int val,beg,huo;

flag=0;

printf("\n请输入游客总人数:");

scanf("%d",&num);

head=Create(num);

ShowList(head);

printf("\n请输入报数的人所在位置:");

scanf("%d",&beg);

printf("\n请输入报数最大值:");

scanf("%d",&val);

printf("\n请输入留下的人数:");

scanf("%d",&huo);

printf("\n将被扔下大海的游客的编号:\n");

Out(head,beg,val,huo);

return 0;

}

jonse * Create(int n)/*建立n个节点的单向循环链表函数*/

{

Jonse *h,*p;

int i;

h=(Jonse *)malloc(sizeof(Jonse));/*为头结点分配空间*/

p=h;

for(i=1;i<=n;i++)/*建立n个节点的单向链表*/

{

p->code=i;

if(i

{

p->next=(Jonse *)malloc(sizeof(Jonse));/*创建新节点*/

p=p->next;

}

}

p->next=h;/*返回头结点,完成单向循环链表的建立*/

return h;

}

void ShowList(Jonse *h)/*打印链表函数*/

{

Jonse *p;

p=h;

do

{

printf("%d\t",p->code);

p=p->next;

}while(p!=h);

}

void Out(Jonse *h,int i,int d,int s)/*出队函数*/

{

int c;

c=s;

Jonse *p,*q;

int k;

p=h;

for(q=h;q->next!=h;q=q->next);/*初始化链表*/

for(k=1;k

q=p;p=p->next;

}

while(p!=p->next)/*循环删除队列结点*/

{

for(k=1;k

{

q=p;

p=p->next;

}

printf("%d ",p->code);/*输出被踢节点的位置*/

q->next=p->next;

free(p);/*释放被踢出的结点*/

p=NULL;/*让p指针赋值为空指针*/

p=q->next;

flag++;

if(num-flag==c)break;

}

printf("\n剩余游客的编号:\n");

//free(p);/*释放被踢出的结点*/

p=NULL;/*让p指针赋值为空指针*/

p = h;

do

{

printf("%d ",p->code);

p=p->next;

}while(p!=h);

printf("\n");

}

抽杀问题-约瑟夫问题

[阅读材料]世界名题与小升初之: 抽杀问题(約瑟夫问题) --马到成功老师在各类竞赛中,各类小升初考试中相关的世界名题出现的概率极高,这是由小升初与数学竞赛的特点决定,这特点便是:知识性,趣味性,思想性相结合。 先给大家介绍这一问题的由来。 据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特後,39 個犹太人与Josephus及他的朋友躲到一個洞中,39個犹太人決定宁愿死也不要被人抓到,于是決定了一个自杀方式,41個人排成一个圆圈,由第1個人开始报数,每报数到第3人该人就必須自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。 然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他將朋友与自己安排在第16個与第31個位置,于是逃过了这场死亡游戏。 解法 約瑟夫问题可用代数分析來求解,将这个问题扩大好了,假设现在您与m个朋友不幸参与了这个游戏,您要如何保护您的朋友?只要画两个圆圈就可以让自己与朋友免于死亡游戏,这两个圆圈是排列顺序,而外圈是自杀顺序,如下图所示: 使用程式来求解的话,只要将阵列当作环状来处理就可以了,在列中由计数1开始,每找到三个无资料区就填入一个计数,直接计数來求解的話,只要將阵列当作环状来处理就可以了,在阵列中由計数1开始,每找到三个无资料区就填入一个計数,直而計数达41为止,然后將阵列由索引1开始列出,就可以得知每个位置的自杀順序,这就是約瑟夫排列,41個人报数3的約瑟夫排列如下所示: 14 36 1 38 15 2 24 30 3 16 34 4 25 17 5 40 31 6 18 26 7 37 19 8 35 27 9 20 32 10 41 21 11 28 39 12 22 33 13 29 23

系统总体结构设计

一、系统设计得原则 1、系统性 从整个系统得角度进行考虑,系统得代码要统一,设计规范要标准,传递语言要尽可能一致,对系统得数据采集要做到数出一处、全局共享,使一次输入得到多次利用。 2、灵活性 系统应具有较好得开放性与结构得可变性,采用模块化结构,提高各模块得独立性,尽可能减少模块间得数据偶合,使各子系统间得数据依赖减至最低限度。 3、可靠性 可靠性就是指系统抵御外界干扰得能力及受外界干扰时得恢复能力。一个成功得管理信息系统必须具有较高得可靠性,如安全保密性、检错及纠错能力、抗病毒能力等。 4、经济性 经济性指在满足系统需求得前提下,尽可能减小系统得开销。一方面,在硬件投资上不能盲目追求技术上得先进,而应以满足应用需要为前提;另一方面,系统设计中应尽量避免不必要得复杂化,各模块应尽量简洁,以便缩短处理流程、减少处理费用。 二、系统设计得主要内容 1、系统总体结构设计 系统总体结构设计包括两方面得内容: 系统网络结构设计; 系统模块化结构设计。 2、代码设计 代码设计就就是通过设计合适得代码形式,使其作为数据得一个组成部分,用以代表客观存在得实体、实物与属性,以保证它得唯一性便于计算机处理。 3、数据库(文件)设计 根据系统分析得到得数据关系集与数据字典,再结合系统处理流程图,就可以确定出数据文件得结构与进行数据库设计。 4、输入/输出设计 输入/输出设计主要就是对以纪录为单位得各种输入输出报表格式得描述,另外,对人机对话各式得设计与输入输出装置得考虑也在这一步完成。 5、处理流程设计 处理流程设计就是通过系统处理流程图得形式,将系统对数据处理过程与数据在系统存储介质间得转换情况详细地描述出来。 6、程序流程设计 程序流程设计就是根据模块得功能与系统处理流程得要求,设计出程序模框图,为程序员进行程序设计提供依据。 7、系统设计文档 系统标准化设计就是指各类数据编码要符合标准化要求,对数据库(文件)命名、功能模块命名也要标准化。 描述系统设计结果就是指系统设计说明书,程序设计说明书,系统测试说明书以及各种图表等,要将她们汇集成册,交有关人员与部门审核批准; 拟定系统实施方案设计就是在系统设计结果得到有关人员与部门认可之后,拟定系统实施计划,详细地确定出实施阶段得工作内容、时间与具体要求。

系统总体结构设计

一、系统设计的原则 1、系统性 从整个系统的角度进行考虑,系统的代码要统一,设计规范要标准,传递语言要尽可能一致,对系统的数据采集要做到数出一处、全局共享,使一次输入得到多次利用。 2、灵活性 系统应具有较好的开放性和结构的可变性,采用模块化结构,提高各模块的独立性,尽可能减少模块间的数据偶合,使各子系统间的数据依赖减至最低限度。 3、可靠性 可靠性是指系统抵御外界干扰的能力及受外界干扰时的恢复能力。一个成功的管理信息系统必须具有较高的可靠性,如安全保密性、检错及纠错能力、抗病毒能力等。 4、经济性 经济性指在满足系统需求的前提下,尽可能减小系统的开销。一方面,在硬件投资上不能盲目追求技术上的先进,而应以满足应用需要为前提;另一方面,系统设计中应尽量避免不必要的复杂化,各模块应尽量简洁,以便缩短处理流程、减少处理费用。 二、系统设计的主要内容 1、系统总体结构设计 系统总体结构设计包括两方面的内容: 系统网络结构设计; 系统模块化结构设计。 2、代码设计 代码设计就是通过设计合适的代码形式,使其作为数据的一个组成部分,用以代表客观存在的实体、实物和属性,以保证它的唯一性便于计算机处理。 3、数据库(文件)设计

根据系统分析得到的数据关系集和数据字典,再结合系统处理流程图,就可以确定出数据文件的结构和进行数据库设计。 4、输入/输出设计 输入/输出设计主要是对以纪录为单位的各种输入输出报表格式的描述,另外,对人机对话各式的设计和输入输出装置的考虑也在这一步完成。 5、处理流程设计 处理流程设计是通过系统处理流程图的形式,将系统对数据处理过程和数据在系统存储介质间的转换情况详细地描述出来。 6、程序流程设计 程序流程设计是根据模块的功能和系统处理流程的要求,设计出程序模框图,为程序员进行程序设计提供依据。 7、系统设计文档 系统标准化设计是指各类数据编码要符合标准化要求,对数据库(文件)命名、功能模块命名也要标准化。 描述系统设计结果是指系统设计说明书,程序设计说明书,系统测试说明书以及各种图表等,要将他们汇集成册,交有关人员和部门审核批准; 拟定系统实施方案设计是在系统设计结果得到有关人员和部门认可之后,拟定系统实施计划,详细地确定出实施阶段的工作内容、时间和具体要求。 另外,为了保证系统安全可靠运行,还要对数据进行保密设计,对系统进行可靠性设计。 三、系统设计的步骤 1、系统总体设计 包括:系统总体布局方案的确定;软件系统总体结构设计;数据存储的总体设计;计算机和网络系统方案的选择。 2、详细设计

约瑟夫森效应

约瑟夫森效应(超导隧道效应) 1962年,英国剑桥大学的研究生约瑟夫森从理论上预言:当两块超导体(S)之间用很薄 的氧化物绝缘层(I)隔开,形成S-I-S结构,将出现量子隧道效应.这种结构称为隧道结,即使在结的两端电压为0时,也可以存在超导电流.这种超导隧道效应现在称为约瑟夫森效应.1911年,荷兰莱顿大学的卡茂林·昂尼斯意外地发现,将汞冷却到-268.98°C时,汞的电阻突然消失;后来他又发现许多金属和合金都具有与上述汞相类似的低温下失去电阻的特性,由于它的特殊导电性能,卡茂林·昂尼斯称之为超导态。卡茂林由于他的这一发现获得了1913年诺贝尔奖。 这一发现引起了世界范围内的震动。在他之后,人们开始把处于超导状态的导体称之为“超导体”。超导体的直流电阻率在一定的低温下突然消失,被称作零电阻效应。导体没有了电阻,电流流经超导体时就不发生热损耗,电流可以毫无阻力地在导线中形成强大的电流,从而产生超强磁场。 1933年,荷兰的迈斯纳和奥森菲尔德共同发现了超导体的另一个极为重要的性质,当金属处在超导状态时,这一超导体内的磁感兴强度为零,却把原来存在于体内的磁场排挤出去。对单晶锡球进行实验发现:锡球过渡到超导态时,锡球周围的磁场突然发生变化,磁力线似乎一下子被排斥到超导体之外去了,人们将这种现象称之为“迈斯纳效应”。 后来人们还做过这样一个实验:在一个浅平的锡盘中,放入一个体积很小但磁性很强的永久磁体,然后把温度降低,使锡盘出现超导性,这时可以看到,小磁铁竟然离开锡盘表面,慢慢地飘起,悬浮不动。 迈斯纳效应有着重要的意义,它可以用来判别物质是否具有超性。 超导材料和超导技术有着广阔的应用前景。超导现象中的迈斯纳效应使人们可以到用此原理制造超导列车和超导船,由于这些交通工具将在悬浮无磨擦状态下运行,这将大大提高它们的速度和安静性,并有效减少机械磨损。利用超导悬浮可制造无磨损轴承,将轴承转速提高到每分钟10万转以上。超导列车已于70年代成功地进行了载人可行性试验,1987年开始,日本国开始试运行,但经常出现失效现象,出现这种现象可能是由于高速行驶产生的颠簸造成的。超导船已于1992年1月27日下水试航,目前尚未进入实用化阶段。利用超导材料制造交通工具在技术上还存在一定的障碍,但它势必会引发交通工具革命的一次浪潮。 超导材料的零电阻特性可以用来输电和制造大型磁体。超高压输电会有很大的损耗,而利用超导体则可最大限度地降低损耗,但由于临界温度较高的超导体还未进入实用阶段,从而限制了超导输电的采用。随着技术的发展,新超导材料的不断涌现,超导输电的希望能在不久的将来得以实现。 现有的高温超导体还处于必须用液态氮来冷却的状态,但它仍旧被认为是20世纪最伟大的发现之一。超导九十年 1911年卡茂林-昂尼斯意外地发现,将汞冷却到-268.98℃时,汞的电阻突然消失;后来他发现许多金属和合金都具有与上述汞相类似的低温下失去电阻的特性 1913年卡茂林-昂尼斯在诺贝尔领奖演说中指出:低温下金属电阻的消失“不是逐渐的,而是突然的”,水银在4.2K进入了一种新状态,由于它的特殊导电性能,可以称为超导态” 1932年霍尔姆和卡茂林-昂尼斯都在实验中发现,隔着极薄一层氧化物的两块处于超导状态的金属,没有外加电压时也有电流流过 1933年荷兰的迈斯纳和奥森菲尔德共同发现了超导体的一个极为重要的性质 1935年德国人伦敦兄弟提出了一个超导电性的电动力学理论 1950年美籍德国人弗茹里赫与美国伊利诺斯大学的巴丁经过复杂的研究和推论后,同时提出:超导电性是电子与晶格振动相互作用而产生的。他们都认为金属中的电子在点阵中被正离子所包围,正离子被电子吸引而影响到正离子振动,并吸引其它电子形成了超导电流。接着,美国伊利诺斯大学的巴丁、库柏和斯里弗提出超导电量子理论,他们认为:在超导态金属中电子以晶格波为媒介相互吸引而形成电子对,无数电子对相互重叠又常常互换搭配对象形成一个整体,电子对作为一个整体的流动产生了超导电流。由于拆开电子对需要一定能量,因此超导体中基态和激发态之间存在能量差,即能隙。这一重要的理论预言了电

约瑟夫问题

一问题描述 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个模块: 主程序模块; 创建循环链表模块; 找节点模块; 删节点模块; 各模块调用关系如下图所示:

约瑟夫问题求解

约瑟夫问题求解 一、问题描述。 1、实验题目 约瑟夫(Joseph)问题的一种描述是:编号为1,2,..., n 的n 个人按顺时针方向围坐一圈, 每人持有一个密码(正整数)。一开始选任一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将它的密码作为新的m值,再从下个人开始新一轮报数,如此反复,直到剩下最后一人则为获胜者。试设计一个程序求出出列顺序。 2、实验要求 利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。 3、测试数据 n=7,7 个人的密码依次为:3,1,7,2,4,8,4 。m的初值为20,则正确的出列顺序应为6,1,4,7,2,3,5。 4、输入输出 输入数据:建立输入处理输入数据,输入n输入以及每个人的密码;m的初值。输出形式:建立一个输出函数,输出正确的序列。 二、需求分析 1、本程序实现求解约瑟夫问题, 2、程序运行后,要求用户指定初始报数上限值,然后读取个人密码。 输入数据:建立输入处理输入数据,输入m的初值,n,输入每个人的密码,建立单循环链表。 输出形式:建立一个输出函数,将正确的序列输出。 三、概要设计 定义的抽象数据类型: 栈的抽象数据类型定义: ADT Stack{ 数据对象:D={ai|ai∈ElemSet,i=1,2,...,n, n≥0,ElemSet为元素集合} 数据关系:R={|ai-1,ai ∈D,i=1,2,...,n} 基本操作: InitStack(&S); //构造空栈 DestroyStack(&S); //销毁栈 ClearStack(&S); //将栈置空 StackEmpty(S); //检查栈是否为空 StackLength(S); //返回栈中元素个数

系统总体设计原则汇总

1.1系统总体设计原则 为确保系统的建设成功与可持续发展,在系统的建设与技术方案设计时我们遵循如下的原则:1、统一设计原则统筹规划和统一设计系统结构。尤其是应用系统建设结构、数据模型结构、数据存储结构以及系统扩展规划等内容,均需从全局出发、从长远的角度考虑。2、先进性原则系统构成必须采用成熟、具有国内先进水平,并符合国际发展趋势的技术、软件产品和设备。在设计过程中充分依照国际上的规范、标准,借鉴国内外目前成熟的主流网络和综合信息系统的体系结构,以保证系统具有较长的生命力和扩展能力。保证先进性的同时还要保证技术的稳定、安全性。3、高可靠/高安全性原则系统设计和数据架构设计中充分考虑系统的安全和可靠。4、标准化原则系统各项技术遵循国际标准、国家标准、行业和相关规范。5、成熟性原则系统要采用国际主流、成熟的体系架构来构建,实现跨平台的应用。6、适用性原则保护已有资源,急用先行,在满足应用需求的前提下,尽量降低建设成本。7、可扩展性原则信息系统设计要考虑到业务未来发展的需要,尽可能设计得简明,降低各功能模块耦合度,并充分考虑兼容性。系统能够支持对多种格式数据的存储。 1.2业务应用支撑平台设计原则 业务应用支撑平台的设计遵循了以下原则:1、遵循相关规范或标准遵循J2EE、XML、JDBC、EJB、SNMP、HTTP、TCP/IP、SSL等业界主流标准2、采用先进和成熟的技术系统采用三层体系结构,使用XML规范作为信息交互的标准,充分吸收国际厂商的先进经验,并且采用先进、成熟的软硬件支撑平台及相关标准作为系统的基础。3、可灵活的与其他系统集成系统采用基于工业标准的技术,方便与其他系统的集成。4、快速开发/快速修改的原则系统提供了灵活的二次开发手段,在面向组件的应用框架上,能够在不影响系统情况下快速开发新业务、增加新功能,同时提供方便地对业务进行修改和动态加载的支持,保障应用系统应能够方便支持集中的版本控制与升级管理。5、具有良好的可扩展性系统能够支持硬件、系统软件、应用软件多个层面的可扩展性,能够实现快速开发/重组、业务参数配置、业务功能二次开发等多个方面使得系统可以支持未来不断变化的特征。6、平台无关性系统能够适应多种主流主机平台、数据库平台、中间件平台,具有较强的跨系统平台的能力。7、安全性和可靠性系统能保证数据安全一致,高度可靠,应提供多种检查和处理手段,保证系统的准确性。针对主机、数据库、网络、应用等各层次制定相应的安全策略和可靠性策略保障系统的安全性和可靠性。8、用户操作方便的原则系统提供统一的界面风格,可为每个用户群,包括客户,提供一个一致的、个性化定制的和易于使用的操作界面。 9、应支持多CPU的SMP对称多处理结构 1.3共享交换区数据库设计原则 1.统一设计原则为保证数据的有效性、合理性、一致性和可用性,在全国统一设立交换资源库基本项目和统一编码的基础上,进行扩展并制定统一的交换资源库结构标准。 2.有效提取原则既要考虑宏观决策需要,又要兼顾现实性,并进行业务信息的有效提取,过滤掉生产区中的过程性、地方性数据,将关键性、结果性数据提交集中到交换区数据库中。 3.保证交换原则统一设计数据交换接口、协议、流程和规范,保证数据通道的顺畅。 4.采用集中与分布式相结合的系统结构根据XX电子政务网络发达,地区经济差异性等特点,交换区采用集中与分布式相结合的数据库系统结构,并逐步向大型集中式数据库系统过渡。这些与外部系统交换的数据也需要从生产区数据得到,也就是说需要XXXX数据和各XXXX 数据的采集不只是局限于XXXX和XXXX原定的指标。 1.4档案管理系统设计原则

《数据结构》实验题目实验一`约瑟夫生死者游戏(链表)

《数据结构》实验题目 实验一、约瑟夫生死者游戏(链表) ●实验目的:熟练掌握单循环链表操作的基本算法实现。 ●实现功能:以单循环链表为存储结构,实现约瑟夫生死者游戏的要求。 ?约瑟夫游戏大意为:每30个游客同乘一条船,因为严重超载,加上风高浪大,危险万分。因此 船长告诉乘客,只有将全船一半的旅客投入大海,其余人才能幸免遇难。无奈,大家只得同意这种办法,并议定30人围成一圈,由第一人数起,一次报数,数到第9人,便把他投入大海中,然后再从他的下一个人数起,数到第9人,再把他扔入大海中,如此循环进行,直到剩下15个乘客为止。问那些位置是将被扔下大海的位置,哪些位置是生者的位置。 ●实验机时:8 ●设计要求: 以单循环链表为存储结构。 为了不失一般性,将30改为一个任意输入的正整数n,而报上限(原为9)也为一个任选的正整数k。这样算法描述如下: (1)创建含有n个结点的单循环链表(建立单循环链表函数) (2)生者与死者的选择(生者与死者的选择函数) P指向链表第一个结点,初始i为1; while(i<=n/2)//删除一半的结点 { 从p指向的结点沿链表前k-1步; 删除第k个结点(q所指向的结点);p指向q的下一个结点; 输出其位置q->data; i自增1; } (3)输出所有生者的位置(输出所有生者函数) (4)输出所有被扔下大海的位置(输出所有死者函数) 实验二、串模式匹配算法(串) ●实验目的:熟练掌握串模式匹配算法。 ●实现功能:从主串中第K个字符起,求出子串在主串中首次出现的位置,即模式匹配或串匹配。 ?要求用三种模式匹配算法分别实现: ?朴素的模式匹配算法(BF算法) ?KMP改进算法(Next[ ]) ?KMP改进算法(NextVal[ ]) ●实验机时:6 ●设计要求: 首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。 程序运行后,给出5个菜单项的内容和输入提示: 1.输入主串、子串和匹配起始位置 2.朴素的模式匹配算法 3.KMP改进算法(Next[ ]) 4.KMP改进算法(NextV al[ ]) 0.退出管理系统 请选择0—4: 菜单设计要求:使用数字0—4来选择菜单项,其它输入则不起作用。

约瑟夫环的代码及算法思想

约瑟夫环 约瑟夫环问题是指n个人围成一个圆圈,然后按照某种方式进行报数,比如我所写的是按照1,2,3的顺序报数,所有报3的人退出圈子,剩下的人继续按照1,2,3的顺序报数,直到只剩下一个人,求这个人在最初的圈子中是第几号。 源代码: #include #include #include #define LEN sizeof(ysf) typedef struct _ysf { int num; struct _ysf *next; }ysf;//定义结构体 ysf *addTile(ysf *head,int j) { ysf *p = (ysf *)malloc(LEN); ysf *pt; int i; pt = head; for(i = 1;i<=j;i++) { if(head == NULL) { p->num = i; head = p; pt = p; head->next = NULL; } else { p->num = i; pt->next = p; pt = p; p->next =NULL; } p = (ysf *)malloc(LEN); } pt->next = head; free(p); p = NULL;

return head; }//使用尾插生成一个长度为n的链表,链表节点中的数据域依次为1-n;ysf *dele(ysf *head) { ysf *pt = NULL; int count = 1; while (head->next != head) { count++;//标识 pt = head; head = head->next; if(count == 3)//寻找到报数为3的节点 { head = head->next; free(pt->next); pt->next = head; count = 1; } } head->next = NULL; return head; }//寻找到会报数为3的节点,将其删除 void showList(ysf *head) { ysf *p = head; while (p != NULL) { printf("最终剩下的是:"); printf("%d\n",p->num); p = p->next; } }//展示最终剩下的那个节点 int main() { ysf *head = NULL; int i; printf("请输入一共几个数字:"); scanf("%d",&i); head = addTile(head,i); head = dele(head); showList(head); return 0; }//主函数

约 瑟 夫 环 问 题 的 三 种 解 法 ( 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开始报数,不断重复,求最后幸存的人最

约瑟夫有件旧外套 教案

中班绘本:约瑟夫有件旧外套教案 活动目标: 1、熟悉绘本故事,感知从外套到纽扣的变化,理解从“没用”变成“有用”的意义。 2、会玩语言节奏游戏,尝试用不同的方法打节奏。 3、能尝试用废旧材料尝试变化制作,体验节约的快乐。 活动准备:故事幻灯、变化图片、操作用的废旧材料 活动过程: 一、谈话导入

师:这是老师以前的一件衣服,已经又脏又破旧了,你们觉得它还有用吗?你们有什么好办法让它变得有用起来?(感谢幼儿提供的帮助) 二、引出绘本故事《约瑟夫有件旧外套》,学语言节奏儿歌 1、引出人物:今天,我们教室请来了一个外国客人,他叫约瑟夫,我们来看下(打开图片)你觉得他长得怎样?穿的怎样?那你觉得他是一个怎样的人? 2、教师边播放幻灯,边讲述故事:在一个农场里,有一个叫约瑟夫的农夫,他有一件旧外套,已经很破旧了。于是,他就把外套改成了夹克。穿着新夹克的约瑟夫很得意。

(教师出示儿歌图卡,示范念节奏儿歌,引导幼儿理解图卡)师:约瑟夫就把这件事编成了一首好听的儿歌:我有一件旧外套,已经很破旧,怎么办呀怎么办?裁裁又剪剪,外套变成新夹克。 4、教师边播放幻灯,边讲述故事:但不久,短夹克也变得又破又旧了。于是,他把夹克改成了背心。他穿着新背心,去参加婚礼。 (教师出示儿歌图卡,引导幼儿念出儿歌)师:你会看着这个图卡像约瑟夫那样来念儿歌吗?(由个别到集体共同尝试)(我有一件旧夹克,已经很破旧,怎么办呀怎么办?裁裁又剪剪,夹克变成新背心。)

5、教师边播放幻灯,边讲述故事:渐渐的,背心也变得破旧了,他就把背心改成了一条围巾。他披着新围巾,参加了男声合唱团。 (教师出示儿歌图卡,引导幼儿用身体动作边打节奏边念儿歌)师:你会用你身体的动作边打节奏边念儿歌吗?谁来试试看?(个别到小组进行尝试表演) 出示图卡,创编语言节奏游戏 6、师:约瑟夫虽然把那些东西都变小了,但都把他们变成了有用的东西。我们来看看,约瑟夫的这条裤子也很破旧了,谁会用刚才的方法帮帮约瑟夫来变一变?(出示裤子图卡,二到三名幼儿表演)

约瑟夫问题算法及数据结构课程设计报告

线性表的操作及其应用 一、问题描述 线性表、队列是一种常用的数据结构,有顺序和链式两种存储结构,在实际中应用十分广泛,而链表又分为单链表和循环链表,队列又分为链式队列和循环队列。这些数据结构都可用来解决约瑟夫环问题。约瑟夫环问题是算法设计中的一个经典问题,是顺序编号的一组n个人围坐一圈,从第1个人按一定方向顺序报数,在报到m时该人出列,然后按相同方法继续报数,直到所有人出列。设计算法求约瑟夫环中人员的出列顺序。 二、基本要求 1、选择合适的存储结构,建立线性表; 2、利用顺序存储结构求解约瑟夫环问题; 3、利用单链表和循环链表分别求解约瑟夫环问题; 4、利用队列求解约瑟夫环问题。 三、测试数据 约瑟夫环的测试数据为7,报数为1至3。 四、算法思想 由于用到四种不同的存储结构,它们的算法思想依次是: 1、首先建立一个顺序表模拟整个约瑟夫环,手动输入顺序表长(即参加约瑟夫循环的人数)和循环的次数和表元素。用已经输出总人数和顺序表长作比较,作为外层循环条件。并对每一个输出后的元素重新赋值以为标记。对于每次循环,首先检查顺序表此次是不是我们设立的标记,如果不是则循环次数加1,当达到要求的循环次数时就将循环次数设置为0,输出该元素到屏幕并将总输出元素加1。每次外循环我们都会移到表的下一个位置,作为新的判断条件,每次报到表尾的时候,我们都将重新设置到表尾,作为下次循环的表元素。 2、首先采用链式循环链表建立整个约瑟夫环,手动输入第一次的循环次数和每个人所持下一个循环次数。设立判断指针指向表头,并将该指针是否为空作为外层循环条件。做一个内层循环,将判断指针移动到循环要输出的数,并设立一个前指针指向该指针的前一个位置,输出该元素后,将循环次数重新赋值成该元素。接着判断前指针和判断指针比较,如果相等说明整个表已经输出完毕,否则将删除该位置的元素。 3、用链式队列建立循环约瑟夫环,手动输入人数,第一次的循环次数和每个人所持下一个循环次数。并将每一个元素依次入队列,根据第一次循环次数,建立一个for循环,每一次循环都出队列,如果达到要求的循环次数就输出,否则进队列,这样这个数字就出现在队尾。第一个数输出后,以队列的非空作为循环条件,判断方式如上。 4、用循环队列建立约瑟夫环,将1-7个元素依次进入循环队列,以队列的长度作为与已输出的元素作为判断条件,对每一个输出后的元素重新赋值以为标记。对于每次循环,首先检查该该位置的元素是不是我们设立的标记-1,如果不是则循环次数加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__':

约瑟夫问题及变种

“约瑟夫”问题及若干变种 例1、约瑟夫问题(Josephus) [问题描述] M只猴子要选大王,选举办法如下:所有猴子按1…M编号围坐一圈,从第1号开始按顺序1,2,…,N 报数,凡报到N的猴子退出到圈外,再从下一个猴子开始继续1~ N报数,如此循环,直到圈内只剩下一只猴子时,这只猴子就是大王。 M和N由键盘输入,1≤N,M≤10000,打印出最后剩下的那只猴子的编号。 例如,输入8 3,输出:7。 [问题分析1] 这个例题是由古罗马著名史学家Josephus提出的问题演变而来的,所以通常称为Josephus(约瑟夫)问题。 在确定程序设计方法之前首先来考虑如何组织数据,由于要记录m只猴子的状态,可利用含m个元素的数组monkey来实现。利用元素下标代表猴子的编号,元素的值表示猴子的状态,用monkey[k]=1表示第k只猴子仍在圈中,monkey[k]=0则表示第k只猴子已经出圈。 程序采用模拟选举过程的方法,设变量count表示计数器,开始报数前将count置为0,设变量current 表示当前报数的猴子编号,初始时也置为0,设变量out记录出圈猴子数,初始时也置为0。每次报数都把monkey[current]的值加到count上,这样做的好处是直接避开了已出圈的猴子(因为它们对应的monkey[current]值为0),当count=n时,就对当前报数的猴子作出圈处理,即:monkey[current]:=0,count:=0,out:=out+1。然后继续往下报数,直到圈中只剩一只猴子为止(即out=m-1)。参考程序如下: program josephus1a {模拟法,用数组下标表示猴子的编号} const maxm=10000; var m,n,count,current,out,i:integer; monkey:array [1..maxm] of integer; begin write('Input m,n:'); readln(m,n); for i:=1 to m do monkey[i]:=1; out:=0; count:=0; current:=0; while out

(H)实验1 约瑟夫环问题

实验1 约瑟夫环问题 背景 约瑟夫问题(Josephus Problem)据说著名犹太历史学家Josephus 有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus 及他的朋友躲到一个洞中,39 个犹太人决定宁愿死也不要被敌人到,于是决定了一个自杀方式,41 个人排成一个圆圈,由第1 个人开始报数,每报数到第3 人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从,Josephus 要他的朋友先假装遵从,他将朋友与自己安排在第16 个与第31 个位置,于是逃过了这场死亡游戏。 原题:用户输入M,N 值,N 个人围成一个环,从0 号人开始数,数到M,那个人就退出游戏,直到最后一个人求最后一个剩下的人是几号? 问题描述 设编号为1-n的n(n>0)个人按顺时针方向围成一圈.首先第1个人从1开始顺时针报数.报m的人(m 为正整数).令其出列。然后再从他的下一个人开始,重新从1顺时针报数,报m 的人,再令其出列。如此下去,直到圈中所有人出列为止。求出列编号序列。 基本要求 需要基于线性表的基本操作来实现约瑟夫问题 需要利用数组来实现线性表 输入输出格式 输入格式:n,m 输出格式1:在字符界面上输出这n 个数的输出序列 输出格式2:将这n 个数的输出序列写入到文件中 选做内容 (1)使用单链表来实现之 (2)使用循环链表来实现之 测试用例 输入:10,3 输出:3 6 9 2 7 1 8 5 10 4 课后习题 请以O(n)的时间复杂度来实现约瑟夫问题。 源代码和程序 /*算法分析: 1.使用一个数组来存放数列; 2.每出去一人,后面人的序号依次加一,总人数减一,循环结束标志是数组中元素个数为0.

面向服务的软件体系架构总体设计分析

面向服务的软件体系架构总体设计分析 计算机技术更新换代较为迅速,软件开发也发生较多改变,传统软件开发体系已经无法满足当前对软件生产的需求。随着计算机不断普及,软件行业必须由传统体系向面向服务架构转变。随着软件应用范围不断增大,难度逐渐上升,需要通过成本手段,提高现有资源利用率。通过面向服务体系结构可提高软件行业应对敏捷性,实现软件生产的规模化、产业化、流水线化。 1 软件危机的表现 1.1 软件成本越来越高 计算机最初主要用作军事领域,其软件开发主要由国家相关部分扶持,因此无需考虑软件开发成本。随着计算机日益普及,计算机已经深入到人们生活中,软件开发大多面向民用,因此软件开发过程中必须考虑其开发成本,且计算机硬件成本出现跳水现象,由此导致软件开发成本比例不断提升。 1.2 开发进度难以控制 软件属于一种智力虚拟产品,软件与其他产品最大不同是其存在前提为内在逻辑关系。相较于计算机硬件粗生产情况,传统工作中的加班及倒班无法应用到软件开发中,提升软件开发进度无法通过传统生产方法实现。且在软件开发过程中会出现一些意料不到的因素,影响软件开发流程,导致软件开发未按照预期计划展开。由此可见不仅软件项目开发难度不断增加,软件系统复杂复杂性也不断提升,即使增加

开发人手也未必能取得良好效果。 1.3 软件质量难以令人满意 软件开发另一常见问题就是在软件开发周期内将产品开发出来,但软件本身表现出的性能却未达到预期目标,难以满足用户多方位需求。该问题属于软件行业开发通病,当软件程序出现故障时会导致巨大损失。在此过程中软件开发缺乏有效引导,开发人员在开发过程中往往立足于自身想法展开软件开发,因此软件开发具有较强主观性,与客户想法不一致,因此导致软件产品质量难以让客户满意。 1.4 软件维护成本较高 与硬件设施一样,软件在使用过程中需要对其进行维护。软件被开发出来后首先进行公测,发现其软件存在的问题,并对其重新编辑提升软件性能,从而为客户提供更好服务。其次软件需要定时更新,若程序员在开发过程中并未按照相关标准执行会导致其缺乏技术性文档,提升软件使用过程中的维护难度。另外在新增或更新软件过程中可能导致出现新的问题,影响软件正常使用,并可能造成新的问题。由此可见软件开发成功后仍旧需要花费较高成本进行软件维护。 2 面向服务体系架构原理 2.1 面向服务体系架构定义 面向服务体系构架从本质上是一种应用体系架构,体系所有功能均是一种独立服务,所有服务均通过自己的可调用接口与程序相连,因此可通过服务理论实现相关服务的调动。面向服务体系构架从本质上来说就是为一种服务,是服务方通过一系列操作后满足被服务方需求的

数据结构实验报告—约瑟夫问题求解

《计算机软件技术基础》实验报告 I —数据结构 实验一、约瑟夫斯问题求解 一、问题描述 1.实验题目:编号 1,2,....,n的n个人顺时针围坐一圈,每人持有一个密码(正整数)。 开始选择一个正整数作为报数上限m,从第一个人开始顺时针自 1 报数,报到m的人出列,将他的密码作为新的m值,从他在顺时针方向下一个人开始重新从 1 报数,直至所有人全部出列。 2. 基本要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序印出个人的编号。 3. 测试数据: n=7,7 个人的密码依次为:3,1,7,2,4,8, 4.m初值为6(正确的出列顺序 应为 6,1,4,77,2,3)。 二、需求分析 1. 本程序所能达到的基本可能: 该程序基于循环链表来解决约瑟夫问题。用循环链表来模拟n 个人围坐一圈,用链表 中的每一个结点代表一个人和他所代表的密码。在输入初始密码后m,对该链表进行遍历,直到第 m个结点,令该结点的密码值作为新的密码值,后删除该结点。重复上述过程,直至所有的结点被释放空间出列。 2. 输入输出形式及输入值范围: 程序运行后提示用户输入总人数。输入人数 n 后,程序显示提示信息,提示用户输入第 i个人的密码,在输入达到预定次数后自动跳出该循环。程序显示提示信息,提示用户输入 初始密码,密码须为正整数且不大于总人数。 3.输出形式 提示用户输入初始密码,程序执行结束后会输出相应的出列结点的顺序,亦即其编号。 用户输入完毕后,程序自动运行输出运行结果。 4.测试数据要求: 测试数据 n=7,7 个人的密码依次为:3, 1, 7, 2, 4, 8, 4。 m初值为 6(正确的出列 顺序应为6, 1, 4,7, 2, 3, 5)。 三、概要设计 为了实现上述功能,应用循环链表来模拟该过程,用结构体来存放其相应的编号和密码

约瑟夫问题

【问题】n只猴子选大王,选举办法如下:从头到尾1,2,3报数,凡报3的退出,余下的从尾到头1,2,3报数,凡报3的退出...如此类推,当剩下两 只猴子时,取这时报1的为王,若想当猴王,请问当初应占据什么位置? 【测试数据】 n │ 7 │ 10│20│100 │ 位置│2 │ 8│16│ 77 │ 【参考程序1】 const number=3; var n,num,i,total:integer; a:array[1..100]of boolean; order:boolean; begin writeln('input n:'); readln(n); total:=n; {队伍中剩下的猴子数} for i:=1 to n do a[i]:=true; repeat order:=true; {order=true:顺序报数} num:=0; {num:报的数字} for i:=1 to n do {顺序报数} if a[i] then begin {第i只在队列中才有资格报数} num:=num+1; if (num=number) then begin {如果为3} a[i]:=false;total:=total-1; {出队,且猴子数少1} num:=0; {num置0,又准备从1报起}

end; {报到尾} if total>number-1 then order:=false; {如还要继续报,则从尾到头} num:=0; {从尾到头时,order=false} for i:=n downto 1 do {逆向报数} if a[i] then begin {在队列中} num:=num+1; if (num=number) then begin a[i]:=false;total:=total-1; num:=0; end; end; until total=number-1; {直到剩下2只} if not order then for i:=1 to n do if a[i] then begin {报剩2只时,如上一次为从尾到头报数,则猴王为从头到尾报的第一只} writeln('The Monkey King is :',i);readln;halt;end; if order then for i:=n downto 1 do if a[i] then begin {报剩2只时,如上一次为从头到尾报数,则猴王为从尾到头报的第一只} writeln('The Monkey King is :',i);readln;halt;end; end. 【参考程序2】程序1中,用了order来记录是顺序还是逆序报数,不太方便。现简化之,取消了order,而在每一次报数前都判断是否只剩2只。 const number=3; var n,num,i,total:integer; a:array[1..200]of boolean;

相关文档
相关文档 最新文档