C++求解多层(多阶)汉诺塔问题(数学解法)

先上题目:

【问题描述】
相信大家应该做过最经典的汉诺塔题目,那什么是多层汉诺塔呢?
【题目描述】 汉诺塔是一个有意思的游戏,每个柱子上套上多个中心有洞的圆盘,每次只能移动一个圆盘,并且每个圆盘不能放在比它面积小的圆盘的上面。现在有三套圆盘并叠加放在一个柱子上了,请移动圆盘,使每个柱子上的圆盘都按照相同的顺序从大到小的摆放好,也就是把三份盘子平均分开。请问对于 n 个不同数量的圆盘(也就是共有 3*n 个盘子),分别在每个柱子上分好 n 个盘子,最少需 要移动多少步?示意图如下图。

【输入格式】 输入共 1 行,包括一个正整数 n

【输出格式】输出共 1 行,一个整数,表示需要移动圆盘的最少的步骤数。

【样例输入】 1

【样例输出】 2

本文概念说明:多层汉诺塔即多阶汉诺塔(阶数为1或3的整倍数)

汉诺塔例举:1、单层汉诺塔:以一个5个圆盘的汉诺塔为例,则这个汉诺塔有5个大小不一样的圆盘。2、以一个有9个圆盘的三阶汉诺塔为例,则这个汉诺塔的圆盘分布为从下到上、从大到小的三层,每层具有三个大小一样的圆盘。3、n阶汉诺塔以此类推(n为3的整倍数)。

      数学解决复杂问题的常见思路之一是:先考虑其简单的情景,具体而言,对于多层汉诺塔问题,我们可以先看简单的情形:单层汉诺塔问题。

单层(一阶)汉诺塔(数学解法)       

  

解法一:归纳法(低年级)

        我们先统计前面几种比较简单的情况的步骤数:        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值