hdu 1995汉诺塔V 递推
经典汉诺塔系列的题。先回忆一下普通汉诺塔的解决方法:
(1)将A上n-1个盘子借助C座线移到B座上;
(2)把A座上剩下的一个盘移到C座上;
(3)将n-1个盘从B座借助于A座移到C座上。
本题求:n阶汉诺塔,上数第k个盘子的移动次数
分析:第K个盘子的移动与第k个盘子上的盘子移动无关,所以问题转换为n-k+1阶汉诺塔中第一个盘子的移动次数。
然后看上述三个步骤中,(2)中第K个盘子未移动,所以递推公式为:f(n) = 2 * f(n-1)
由于问题已经转化成n-k+1阶汉诺塔,故所求通项f[n]=2^(n-k)。
#include<stdio.h> #include<math.h> int main() { int c,n,k; scanf("%d",&c); while(c--) { scanf("%d %d",&n,&k); printf("%I64d\n",(__int64)pow(2,n-k)); } return 0; }