Hanoi双塔问题

题目描述

给定A,B,C三根足够长的细柱,在A柱上放有2n个中间有空的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形)。现要将 这些国盘移到C柱上,在移动过程中可放在B柱上暂存。要求:

(1)每次只能移动一个圆盘;

(2) ABC三根细柱上的圆盘都要保持上小下大的顺序;

任务:An2n个圆盘完成上述任务所需的最少移动次数,对于输入的n,输出An

输入

输入文件hanoi.in为一个正整数n,表示在A柱上放有2n个圆盘。

输出

输出文件hanoi.out仅一行,包含一个正整数,为完成上述任务所需的最少移动次数An

样例输入

1

样例输出

2

提示

对于50%的数据, 1<=n<=25

对于100% 数据, 1<=n<=200

设法建立AnAn-1的递推关系式。

思路

双汉诺塔等于单汉诺塔两倍

An为单汉诺塔要移动的步数;

可以由递推公式An=2*A(n-1)+1

由A1=1;

推出An=2^n-1;

所以双汉诺塔An=2*(2^n)-2

由于n比较大longlong都放不下所以需要大数

用Python再合适不过了

x = int(input())
y = 1
w = 0
while w < x:
    y *=2
    w = w + 1
y = 2*y - 2
print(y)

 

posted @ 2019-06-15 22:54  YFR718  阅读(473)  评论(0编辑  收藏  举报