[easy高精度]Hanoi双塔问题

【题目描述】

给定A、B、C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形)。现要将这些圆盘移到C柱上,在移动过程中可放在B柱上暂存。要求:
(1)每次只能移动一个圆盘;
(2)A、B、C三根细柱上的圆盘都要保持上小下大的顺序;
任务:设An为2n个圆盘完成上述任务所需的最少移动次数,对于输入的n,输出An。

P1069

【输入格式】

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

【输出格式】

仅一行,包含一个正整数, 为完成上述任务所需的最少移动次数An。

【样例输入】

样例输入1 样例输入2
1 2

【样例输出】

样例输出1 样例输出2
2 6

【分析】

设f[n]为有2 * n个圆盘,所需移动的步数。

分三步:

  1. 将2 * n - 2个盘子移动到B,所用的步数是f[n – 1]
  2. 将最后的两个移动到C上,所用步数是2
  3. 将2 * n - 2个盘子移动到C,所用的步数是f[n – 1]

那么f[n] = 2 * f[n – 1] + 2;

f[n] + 2 = 2 * (f[n – 1] + 2);

f[n] = 2 ^ (n + 1) – 2;

然后就是高精度了。


posted @   Sephiroth.L.  阅读(483)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示