HDU 2064汉诺塔变形(1)

问题描述:在汉诺塔的规则上附加一条不能从左直接移到右或者从右移动到左,求操作数。

 

由于不能直接用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;
}
posted @ 2014-02-20 12:19  zhen94  阅读(263)  评论(0编辑  收藏  举报