ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:387.54KB ,
资源ID:19847517      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19847517.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汉诺塔问题解决及游戏方案文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汉诺塔问题解决及游戏方案文档格式.docx

1、六、设计难点及难点处理-7七、运行结果及结果分析-8八、程序需要完善的地方-10九、自己的心得体会-11一、问题描述汉诺塔又称河内塔)问题是起源于印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石柱,第一根上面套了64个圆的金片,大的在下,小的在上。庙里的众僧不倦地把他们一个个的从这根柱搬到另一根柱上,规定可以利用中间的一根柱作为帮助,但每次只能般一个,而且大的不能放在小的上面。这是一个著名的问题。由于条件是一次只能移动一个盘,且不允许大盘放在小盘上面,所以64个盘的移动次数是18446744073709551615次。这是一个天文数字,若每一微秒可能计算一次移动,那么也需要几

2、乎一百万年。我们仅能找出问题的解决方法并解决较小N值时的汉诺塔,但很难用计算机解决64层的汉诺塔。后来,这个传说就演变成汉诺塔游戏:1.有三根针A,B,C,A针上有n个圆盘。2.每次移动一个圆盘,小的只能叠在大的上面。3.把所有圆盘出从A针上全部移动到C针上,移动过程中可以利用中间的B针作为帮助。汉诺塔问题也是程序设计中的经典递归问题:将n个盘从A针上全部移动到C针可以分解为下面3个步骤(1)将A上n-1个盘移到B针上借助C针)。(2)把A针上剩下的一个盘子移到C针上。(3)将n-1个盘子从B针移动到C针上借助A针)。二、开发平台此次课程设计运用到的开发平台有Windows XP和Visual

3、 C+。通过C+语言编程来实现较小n值汉诺塔问题的解决。三、变量命名规则四、程序中主要类或函数的描述五、程序流程六、设计难点及难点处理七、运行结果及结果分析程序的运行结果如下:第一步,输入盘的个数n10)运行结果如图1所示:图1第2步,选择菜单中的1,电脑自动控制和选择菜单中的2,由人控制,运行结果如图2所示:图2第3步,输入盘的移动速度,运行结果如图3所示:图3第4步,输出运行结果。运行过程和结果如图4,5所示:图4图5第5步,输入p,判断是否继续游戏运行,运行结果如图6所示:图6第6步,若继续游戏,运行结果如图7,再次循环:图7结果分析:在做汉诺塔问题时,最大的问题就是如何来移动盘子,而且

4、要满足各种限制条件。此次,我们将盘子抽象成一个数组中的具体元素,通过改变数组中元素的位置来实现盘子的移动。我们知道,改变数组中的元素位置是很容易实现的,这样就将负责的问题简单化了。再者,为实现游戏的连续性,我们在程序中加入了一个循环语句来实现此功能。可单单加入循环还不能实现这功能,再继续进行下一次游戏是,需要将上次的游戏运行结果进行初始化,若不初始化,下次的运行结果将会是在上次运行结果的基础上再将程序运行一遍,就会出现错误。所以在为了得到此结果,需要注意很多容易疏忽的小细节。八、程序需要完善的地方九、自己的心得体会 一个多礼拜里,我们有过不少的疑惑和惊喜,也有过唇枪舌剑的争论和相互鼓励的安慰。

5、我们经历了很多,同时也收获了很多。经过这次课程设计,我不仅学到了很多知识和技能,更重要的是锻炼了我们如何运用所学的知识去解决实际问题的能力。C+语言课程设计和现代计算机技术相结合,是对我在本阶段学完理论知识课程后对自己该方面能力的一次很好检验。从开始的算法思路到程序运行调试后得到了运行结果界面以及令人兴奋的可行程序,都是一次很好的学习和锻炼过程。使我们巩固了所学的理论知识,培养了我灵活运用和知识组合及技能来分析和解决实际问题的能力。同时还提高了我对C+语言的兴趣。总之,在这一次C+语言课程设计中我获得了如下收获:1.对实验原理有了更深刻的理解2.对该理论在实际应用中有了深刻的理解3.激发了学习

6、的积极性十、参考文献1申惠芳,基于VC+语言的四针汉诺塔游戏的设计与算法研究 ,山东, 科技信息 ,2018年32期;2黄维通,VC+面向对象与可视化程序设计M,北京:清华大学出版社;3孙东宁,汉诺塔问题研究,吉林,考试周刊,2018年28期;4郑莉,董渊,何江舟,C+程序语言设计M塔递归算法的教案研究,云南,云南电大学报,2005年1期。 附录程序)#includestdlib.hconio.hstring.hmath.hiostream.hstruct T int h。 /塔的高度 int x。 /塔的第一个盘的x坐标 ,y坐标等于(7+n-塔的高度h int l。 /塔的第一个盘的长度

7、ta3=10,15,2,0,0,0,0,0,0。 char c1879,hnt1879= , 汉诺塔动画演示 。int n。int sum=0。int computerorpeople=1。int speed=0。void count_ta_1(int ta_1/重新计算塔的第一个盘的x坐标和塔的高度 int i。 int j。int k=0。 for(i=7。ifor(j=4+ta_1*24。j if(hntij!= for(。hntij+k!。k+ tata_1.x=j。 tata_1.l=k。return。 void move(int ta_1,int ta_3 sum+。 tata_3

8、.h+。 tata_3.x=tata_1.x+(ta_3-ta_1*24。/每个塔之间相隔4 tata_3.l=tata_1.l。 for(i=0。tata_1.l。 hnt7+n-tata_3.htata_3.x+i=hnt7+n-tata_1.htata_1.x+i。 hnt7+n-tata_1.htata_1.x+i= tata_1.h-。 count_ta_1(ta_1system(cls couthntiendl。 couthnt17。endl塔移动一个盘到char(ta_3+65塔 步数:sum system(pause else200000*speed。 void hanoi(i

9、nt ta_1,int ta_2,int ta_3,int m /递归,ta_1/ta_2/ta_3分别为3座塔的代号,m为盘子数 if(m=1 move(ta_1,ta_3 /如果盘子为1,将这个盘子从塔座A移动到塔座C hanoi(ta_1,ta_3,ta_2,m-1 /将塔座A的前m-1个盘子移到塔座B /将塔座A的第m个盘子移到塔座C hanoi(ta_2,ta_1,ta_3,m-1 /将塔座B的m-1个盘子移到塔座C void main( int i,b=1。18。 for(int j=0。=78。 cij=hntij。 while(b=1请输入汉诺塔的高度10): cinn。请选择

10、:输入1由电脑自动控制。 输入2由人控制。请输入:computerorpeople。 if(computerorpeople!=1&computerorpeople!=2 computerorpeople=1。 if(computerorpeople=1请输入移动盘的速度(例如:输入1000则代表1秒: cinspeed。 if(n10 n=10。 ta0.h=n。 system(/清除屏幕hnt17 hntij=cij。是否继续游戏?是请按1,不是请按2cinb。 sum=0。 ta0.h=10。 ta0.l=2。 ta0.x=15。 for(i=1。3。 tai.h=0。tai.l=0。 tai.x=0。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1