print(2*(2**int(input())-1))

解题思路:

假设有n个盘子,而且我们已经知道了: 移动n-1个盘子所需的最少步数,记为 fn -1于是有式子fn=2*( fn-1) +1

为什么呢?

n个盘子上面的 n -1个盘子(编号0~n -2)视为一个整体,我们需要将其移动到 B(经过空的 C柱)需要f(n )-1 步(不考虑柱子编号,我们利用空柱子将这一部分移动过去需要的步数相同)。此时仅仅需要 1 步将第 n 个盘子(编号为 n -1)移动到C,此时这个大盘子不影响我们移动剩余的 n -1个盘子。那我们就可以经A ,将其移动到 C 柱,又需fn -1 步,此时n 个盘子移动完毕。

共需要: fn=2*( fn-1) +1次 (这便是移动n个盘子到目标状态的最小步数)

利用数列知识: f[n] +1= 2 (f(n -1) +1)此时为等比数列,且f(1) = 1,故有: fn = 2” - 1

2n个盘子就是2fn

就是2*(2” - 1)

点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论