汉诺塔问题求解。相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有3根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把

汉诺塔问题求解。相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有3根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。请编写程序,实现从键盘上输入一个小于等于64的正整数表示金盘数,打印出移动的步骤。XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

汉诺塔问题求解。相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有3根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。请编写程序,实现从键盘上输入一个小于等于64的正整数表示金盘数,打印出移动的步骤。XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

【分析】依题意可将其抽象为一个数学问题,如上图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移动一个盘子且大盘子不能在小盘子上面,求移动的步骤。其间,可以利用B柱子作为中间过渡。XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

当n=1时XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

第1次1号盘A----﹥C  js=1次XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

当n=2时XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

第1次1号盘A----﹥BXxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

第2次2号盘A----﹥CXxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

第3次1号盘B----﹥C  js=3次XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

当n=3时XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

第1次1号盘A----﹥CXxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

第2次2号盘A----﹥BXxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

第3次1号盘C----﹥BXxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

第4次3号盘A----﹥CXxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

第5次1号盘B----﹥AXxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

第6次2号盘B----﹥CXxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

第7次1号盘A----﹥C  js=7次XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

不难发现规律:1个圆盘移动的次数是2的1次方减1XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

2个圆盘移动的次数是2的2次方减1XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

3个圆盘移动的次数是2的3次方减1XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

------XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

n个圆盘移动的次数2的n次方减1XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

故:移动次数为2n-1XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

【算法描述】XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

通过上面的分析不难发现,本例问题求解应通过函数递归调用来实现。可以简单分为三个步骤。XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

第一步:把n-1个盘子由A移到BXxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

第二步:把第n个盘子由A移到CXxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

第三步:把n-1个盘子由B移到CXxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

(1)自定义一个递归函数mov(),其包含四个参数分别表示金盘个数、A杆、B杆与C杆上的个数,并且该函数的函数体包含自调用语句;XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

(2)由主函数调用mov()函数,且金盘总数由键盘输入,最后输出每一步的过程;XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

(3)输出结果,结束程序。XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

【参考程序】XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

汉诺塔问题求解。相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有3根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。请编写程序,实现从键盘上输入一个小于等于64的正整数表示金盘数,打印出移动的步骤。XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

【运行情况】XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

汉诺塔问题求解。相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有3根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。请编写程序,实现从键盘上输入一个小于等于64的正整数表示金盘数,打印出移动的步骤。XxU100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

关 键 词

汉诺塔问题求解

相关教程

从键盘上输入一个圆的半径(r),求该圆的面积(S)与周长(L),并保留两位小数输出S与L。
请编程实现从键盘上输入一个梯形的上底、下底和高 (假设为整型数据),输出该梯形的面积(保留小数点后2位)。
问题解决。如右图所示,一块平行四边形的草坪中有一条长8米、宽未 知几米的小路,请编写程 序,实现从键盘上输入小 路的宽,求草坪的面积。 如果铺每平方米草坪的价 格是16元,那么铺好这些 草坪需要多少钱
编程实现从键盘上输入一个大写字母,将其转换成小写字母输出。
解决实际问题。某市区出租车的计费标准是:起步价(3千米以内,包括3千米)9元,以后每超过1千米(不足1千米的按1千米计算)另加价1.5元。请编程计算乘车8.5千米要付多少钱?
体验常量及其应用。分别定义整型、实型常量,然后输出相应表达式的值。
字符数据类型存储空间大小的检测及字符与整数运算、转义字符。定义一个字符变量,然后输出它的存储空间大小(单位为:字节),并体验字符与整数的运算和转义字符的功能。
检测实型数据类型存储空间大小和有效位。分别定义f1oat、double、long double类型的变量各一个,然后依次输出它们的存储空间大小(单位为:字节)。
整型数据类型存储空间大小的检测。分别定义short、int、1og类型的变量各一个,然后依次输出它们的存储空间大小(单位为:字节)。
鸡兔同笼问题。大约在1500年前,《孙子算经》中记载了这样一个有趣的问题。书中的叙述是:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”。这四句话的意思是:有若干只鸡兔同在一个笼子里,从

提示声明

  • 免责声明:本站资源均来自网络或者用户投稿,仅供用于学习和交流:如有侵权联系删除!

猜你喜欢