Hnuahe大數據02題集——Problem G 漢諾塔Ⅲ

Problem Description

還記得漢諾塔III嗎?他的規則是這樣的:不允許直接從最左(右)邊移到最右(左)邊(每次移動一定是移到中間杆或從中間移出),也不允許大盤放到小盤的上面。xhd在想如果我們允許最大的盤子放到最上面會怎麼樣呢?(只允許最大的放在最上面)當然最後需要的結果是盤子從小到大排在最右邊。

Input

輸入數據的第一行是一個數據T,表示有T組數據。
每組數據有一個正整數n(1 <= n <= 20),表示有n個盤子。

Output

對於每組輸入數據,最少需要的擺放次數。

Sample Input

2
1
10

Sample Output

2
19684

解題思路:

這道題就是畫圖,找出規律。

當n爲1時,擺放2次,

當n爲2時,擺放4次,

當n爲3時,擺放10次,

當n爲4時,擺放28次

 ......

當爲n次時,擺放的次數爲 a [ n - 1 ] * 3 - 2次

即使用遞歸

代碼如下:

#include<stdio.h>
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int i,n;
        scanf("%d",&n);
        int a[15]={0};
        a[1]=2;
        
        for(i=2;i<=n;i++)
        {
            a[i]=a[i-1]*3-2;
         } 
        printf("%d\n",a[n]);
    }
}

 

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