RPG专题

HDU2064-汉诺塔III:

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2064

参考博文:https://blog.csdn.net/narzisen/article/details/79772544

分析:假设有编号1......N的盘子,要将编号为N的盘子移动的最右边的柱子上,那么首先将编号1.....N-1的盘子移动到最右边的柱子上,需要buf[n-1]次,然后将编号为N的盘子移动到中间柱子上,需要1次, 然后将最右边的1.....N-1的盘子移动到最左边柱子上,需要buf[n-1]次,然后将中间编号为N的盘子移动到最右边柱子上,需要1次,最后将最左边柱子上移动到最右边柱子上,需要buf[n-1]次,共需要buf[n]=3*buf[n-1]+2次。代码如下:

#include <stdio.h>

int main ()
{
    int n;
    long long buf[36];
    buf[0] = 0;
    buf[1] = 2;
    for(int i = 2; i < 36; i++)
    {
        buf[i] = 3*buf[i-1]+2;
    }
    while(scanf("%d", &n) != EOF)
    {
        printf("%lld\n", buf[n]);
    }
    return 0;
}

HDU:2077-汉诺塔IV

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2077

参考博文:https://blog.csdn.net/qq_41627235/article/details/82959765

代码如下:

#include <stdio.h>

int main ()
{
    int n, T;
    long long buf[20];
    buf[0] = 0;
    buf[1] = 2;
    for(int i = 2; i < 20; i++)
    {
        buf[i] = 3*buf[i-1]+2;
    }
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d", &n);
        printf("%lld\n", buf[n-1]+2);
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值