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

 

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