问题描述:在汉诺塔的规则上附加一条不能从左直接移到右或者从右移动到左,求操作数。
由于不能直接用A柱到C柱,所以第n个盘子只能A->B->C,所以前n-1个盘子要移到C让路(nth A->B),再移到A让路(nth B->C),最后前n-1个盘子移到C完成操作。
移动策略:
1)前n-1个盘子A->C
2)第n个盘子A->B
3)前n-1个盘子C->A
4)第n个盘子B->C
5)前n-1个盘子A->C
得出递推公式:f[n]=f[n-1]*3+2;
#include<stdio.h> int main() { long long f[36]; int i,n; for(i=2,f[1]=2;i<36;i++) { f[i]=f[i-1]*3+2; } while(scanf("%d",&n)) { printf("%d\n",f[n]); } return 0; }
原文:http://www.cnblogs.com/zhen94/p/3557382.html