汉诺双塔问题python_Hanoi双塔问题-题解(C语言代码)

#### 原题链接:[问题 1109: Hanoi双塔问题][18839270274][18839270274]: https://www.dotcpp.com/oj/problem1109.html "问题 1109: Hanoi双塔问题"#### 解题思路:类似大数运算。双盘汉诺塔和单盘汉诺塔的移动次数只有一个区别,那就是双盘的比单盘的移动次数多一倍现在来分析单盘的汉诺塔:当只有一个盘的时候,...
摘要由CSDN通过智能技术生成

#### 原题链接:[问题 1109: Hanoi双塔问题][18839270274]

[18839270274]: https://www.dotcpp.com/oj/problem1109.html "问题 1109: Hanoi双塔问题"

#### 解题思路:

类似大数运算。

双盘汉诺塔和单盘汉诺塔的移动次数只有一个区别,那就是双盘的比单盘的移动次数多一倍

现在来分析单盘的汉诺塔:

当只有一个盘的时候,只需要移动一次;

当有两个盘的时候,只需要移动三次,(最上层的那个盘需要移动两次,下面的那个盘移动一次)

当盘数为n时(n>=2),我们可以将上面的n-1层看成一个盘,由于初始摆放顺序是从上往下盘子由小到大,因此,无论上面的哪个盘都是小于最底下那个盘的,而上面n-1个盘组合成的大盘移动一次所需要搬动盘子的次数,实际上就是将这n-1个盘子从一个柱子搬到另一个柱子所需要搬动的次数,我们可以再根据刚刚所分析的方法,将n-1个盘子上面的n-1个盘子当做一个盘子,以此类推,直到上面的大盘只包含一个盘子

刚刚上面也分析到有两个盘子的时候,上面的那个盘子需要移动两次,下面的盘子是一次,设n个盘需要移动的次数是f(n),上面n-1个盘需要移动的次数是f(n-1),那么就有递推式f(n)=2*f(n-1)+1;

输出双盘汉诺塔结果

#### 参考代码:

```c

//输入为一个正整数n,表示在A柱上放有2n个圆盘。

#includeint main()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值