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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章