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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

关 键 词

汉诺塔问题求解

相关教程

提示声明

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

猜你喜欢