也许放晴会比较好一点


私信TA

用户名:uq_16654036368

访问量:1701

签 名:

等  级
排  名 790
经  验 3602
参赛次数 0
文章发表 34
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

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分

2 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区