- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE \* MERGEFORMAT 14
目录
TOC \o 1-3 \h \z \u HYPERLINK \l _Toc287457135 一、需求分析 PAGEREF _Toc287457135 \h 2
HYPERLINK \l _Toc287457136 1、问题描述: PAGEREF _Toc287457136 \h 2
HYPERLINK \l _Toc287457137 2、基本要求: PAGEREF _Toc287457137 \h 2
HYPERLINK \l _Toc287457138 3、需求分析: PAGEREF _Toc287457138 \h 2
HYPERLINK \l _Toc287457139 二、概要设计 PAGEREF _Toc287457139 \h 3
HYPERLINK \l _Toc287457140 三、详细设计 PAGEREF _Toc287457140 \h 4
HYPERLINK \l _Toc287457141 1、循环队列 PAGEREF _Toc287457141 \h 4
HYPERLINK \l _Toc287457142 2、循环链表 PAGEREF _Toc287457142 \h 5
HYPERLINK \l _Toc287457143 3、伪代码 PAGEREF _Toc287457143 \h 6
HYPERLINK \l _Toc287457144 4、具体函数分析及变量分析 PAGEREF _Toc287457144 \h 7
HYPERLINK \l _Toc287457145 四、调试分析和测试结果 PAGEREF _Toc287457145 \h 7
HYPERLINK \l _Toc287457146 五、总结 PAGEREF _Toc287457146 \h 10
HYPERLINK \l _Toc287457147 六、参考文献 PAGEREF _Toc287457147 \h 11
HYPERLINK \l _Toc287457148 七、附录 PAGEREF _Toc287457148 \h 12
一、需求分析
1、问题描述:
一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
2、基本要求:
输入数据:输入m,n。 m,n 为整数,nm。
输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的 猴子是几号 ,建立一个函数来实现此功能。
3、需求分析:
① 输入数据m,n
② 计算出最终猴子大王的序号。
③ 模拟出整个过程。
④ 找到合适的数据结构处理这个问题。
⑤ 找到正确的方法解决这个问题。
二、概要设计
对题意进行分析后,可以画出整个过程的流程图。
具体流程图:
是
是
开始
结束
剩下的猴子数是否为1
否
进行1-n的报数
删除第n只猴子
输出猴子大王的序号
这个问题属于约瑟夫环问题,我们对这个题目进行具体分析:
假如现在m=5,n=2,即有5只猴子,按照循环数2的方法,我们演变这个过程:
第一次:1 2 3 4 5
× 2号出局
第二次:1 2 3 4 5
× × 4号出局
第三次:1 2 3 4 5
× × × 1号出局
第四次:1 2 3 4 5
× × × × 5号出局
最后得到猴子大王的序号是3号。
那么一般化,对于m猴子,n只猴子我们该怎么做?
三、详细设计
1、循环队列
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
仔细分析整个过程,我发现这个过程和学过的循环队列特别像,在学习循环队列的时候,如果采取数组来存储队列,那么在front端弹出元素就执行front=(front+1)%MAX,在rear端进入队列的时候就执行rear=(rear+1)%MAX,以实现绕圈的操作。
回顾一下循环队列的具体的入队算法:
1、tail=tail+1;
2、若tail=n+1,则tail=1;
3、若head=tail尾指针与头指针重合了,表示元素已装满队列,则作上溢出错处理;
4、否则,Q(tail)=X,结束(X为新入出元素)。
队列空的条件:front==rear
队列满的条件
文档评论(0)