郑涞允
(菜虚捆)
1
题目描述:
著名的汉诺塔问题:
有三根杆子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 个赞
金杭东
(金杭东)
2
这只需要找到递推式就很简单了
a[1]=1;
a[i]=a[i-1]*2+1
2 个赞
陈晟亦
(弈剑のㄨ听雨阁)
4
将A柱作为当前柱,B柱作为中转柱,C柱作为目标柱
如果要让A柱(当前柱)中的圆盘移动到C柱(目标柱),那么就需要B柱(中转柱)的参与。
可以把n个圆盘简化,看作两个圆盘进行移动,即第n个圆盘,和n-1个圆盘
2 个赞
陈晟亦
(弈剑のㄨ听雨阁)
5
得到移动顺序:
第一次: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 个赞