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;
}

转载于:https://www.cnblogs.com/zhen94/p/3557382.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值