C++双层汉诺塔问题。。。很有意思也很难
ProblemDescription想必,前面的汉诺塔对于大家来说,justapieceofcake!我们来玩一个更高级的汉诺塔游戏——双层汉诺塔。双层汉诺塔游戏中,相同...
Problem Description
想必,前面的汉诺塔对于大家来说,just a piece of cake!
我们来玩一个更高级的汉诺塔游戏——双层汉诺塔。双层汉诺塔游戏中,相同大小的盘都有颜色不同的两片,按照次序放在最左边的金刚柱上。游戏的目的是把不同颜色的盘分别按照上小下大的顺序放在中间和右边的两个柱子上。在移动过程中,在移动过程中,依旧是遵守大盘必须在小盘之下,而颜色顺序无限制。
下面给出的四个盘子的例子,当然,这个图片是不完整的,还需要把左边粉红色的盘子移到最右边的柱子上,把黄色的盘子移动到中间的柱子上。
Input
第一行输入一个整数t(t < 10),表示测试的组数。接下来的t行,每行输入一个正偶数n(0 <n<=20),表示盘子的个数。
Output
对于每组测试数据,首先输出一行Case #X:,表示第X组测试数据。接下来,每行都输出移动盘子的步骤,对于每次移动,以"Move from X to Y"表示,表示需要将X柱子上最顶层的盘子移动到Y柱子上,其中X,Y是A,B,C中的一个,当然,X和Y不可能相同
Sample Input
224
Sample Output
Case #1:Move from A to BMove from A to CCase #2:Move from A to CMove from A to CMove from A to BMove from A to BMove from C to AMove from C to AMove from B to CMove from A to BMove from A to C 展开
想必,前面的汉诺塔对于大家来说,just a piece of cake!
我们来玩一个更高级的汉诺塔游戏——双层汉诺塔。双层汉诺塔游戏中,相同大小的盘都有颜色不同的两片,按照次序放在最左边的金刚柱上。游戏的目的是把不同颜色的盘分别按照上小下大的顺序放在中间和右边的两个柱子上。在移动过程中,在移动过程中,依旧是遵守大盘必须在小盘之下,而颜色顺序无限制。
下面给出的四个盘子的例子,当然,这个图片是不完整的,还需要把左边粉红色的盘子移到最右边的柱子上,把黄色的盘子移动到中间的柱子上。
Input
第一行输入一个整数t(t < 10),表示测试的组数。接下来的t行,每行输入一个正偶数n(0 <n<=20),表示盘子的个数。
Output
对于每组测试数据,首先输出一行Case #X:,表示第X组测试数据。接下来,每行都输出移动盘子的步骤,对于每次移动,以"Move from X to Y"表示,表示需要将X柱子上最顶层的盘子移动到Y柱子上,其中X,Y是A,B,C中的一个,当然,X和Y不可能相同
Sample Input
224
Sample Output
Case #1:Move from A to BMove from A to CCase #2:Move from A to CMove from A to CMove from A to BMove from A to BMove from C to AMove from C to AMove from B to CMove from A to BMove from A to C 展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏15(财富值+成长值)
1个回答
展开全部
其实和单层的一样,将设有2n个在A
起始:A,需要移动2n,则先将2n-1个移到C,再将一个移到B,这时最大的两个分别已经到位
起始:C,需要移动2n-2,则先将2n-4个移到A,再将一个移到B,这时次大的两个分别到位
起始:A,需要移动2n-4,则先将2n-5个移到A,再将一个移到B,这时第三大的两个分别到位
...
以此类推就行,具体请去参考理解单层汉诺塔的实现
起始:A,需要移动2n,则先将2n-1个移到C,再将一个移到B,这时最大的两个分别已经到位
起始:C,需要移动2n-2,则先将2n-4个移到A,再将一个移到B,这时次大的两个分别到位
起始:A,需要移动2n-4,则先将2n-5个移到A,再将一个移到B,这时第三大的两个分别到位
...
以此类推就行,具体请去参考理解单层汉诺塔的实现
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询