汉诺塔问题没思路啊!!

题目描述:

著名的汉诺塔问题:

有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆环,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:

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

2.大盘不能叠在小盘上面。

解决这类问题有以下方案:

现在假设我们要将 t 个盘子从柱子 x 放到柱子 y,则我们可以先想办法把上面的 t-1个盘子放到另一个柱子上,然后将最大的盘子放到y上,最后将那t-1个盘子放到第 y 个柱子上。那么移动 t-1 个盘子就变成了一个子问题。

给定 n ,求问:按照上述策略,一共需要多少次操作才能成功?

输入格式:

一个正整数 n

输出格式:

一个正整数表示答案。

样例输入1:

2

样例输出1:

3

约定:

1<=n<=10

提示:

2 个赞

这只需要找到递推式就很简单了
a[1]=1;
a[i]=a[i-1]*2+1

记得给个解决方案

2 个赞

将A柱作为当前柱,B柱作为中转柱,C柱作为目标柱
如果要让A柱(当前柱)中的圆盘移动到C柱(目标柱),那么就需要B柱(中转柱)的参与。
可以把n个圆盘简化,看作两个圆盘进行移动,即第n个圆盘,和n-1个圆盘

2 个赞

得到移动顺序:
第一次:A---->B
第二次:A---->C
第三次:B---->C
(这是A柱上只有两个圆盘的规律)
n== 1:A—>C 共1次
n== 2:A—>B A—>C B—>C 共3次
n== 3:A—>C A—>B C—>B A—>C B—>A B—>C A—>C 共7次
可得n个圆盘的次数为2^n-1(2的n次方-1)
不管有多少个,方法都是从第一个,到第二个,第三个,第四个…n个 移动。
那么在移动第三个的时候,会用到两次移动第二个的次数。
把n一个一个的拆分完成后,在递归回来

4 个赞

哈哈哈哈哈哈哈哈哈哈哈