汉诺塔递推题,比汉诺塔多了一个限制条件,盘子只允许在相邻的柱子之间移动。
分析:
第1步:初始状态;
第2步:把上面的n-1个盘移到第3号杆上;
第3步:把第n个盘从1移到2;
第4步:把前n-1个从3移到1,给第个盘让路;
第5步:把第n个盘从2移到3;
第6步:把前n-1个从移到3,完成移动;
我们设f(n)为把n个盘从1移到3所需要的步数,当然也等于从3移到1的步数。
看什么的图就知道,要想把第n个盘从1移到3,需要想把前n-1个从1移动3,再从3->1最后再1->3。
而第n个盘要从1->2->3经历2步。
∴f(n) = 3 × f(n-1) + 2;
f(1) = 2;
#include<stdio.h> int main() {__int64 f[36],n,i;f[1]=2;for(i=2;i<=35;i++)f[i]=3*f[i-1]+2;while(scanf("%I64d",&n)!=EOF)printf("%I64d\n",f[n]);return 0; }