ZeroJudge B229: 路徑問題

考慮在 X-Y 平面上的整數格子點上建構長度為 N 的路徑。其中在格子點 (x, y) 時,路徑可以往右走到格子點 (x+1, y);或往左走到格子點 (x-1, y);或往上走到格子點 (x, y+1)。長度為 N 的路徑必須經過 N 個相異的邊。試問由原點 (0, 0) 出發並按照上述規則所形成長度為 N 的路徑有幾條?

範例測資

範例輸入範例輸出
EOF 輸入,輸入僅有一列,包含一個正整數 N (1 <= N <= 50)。輸出所有由原點 (0, 0) 出發且長度為 N 的路徑總數。
1
3
3
17

解題思路

計算本題答案時需要使用 unsigned long long int。宣告一個陣列 ans 用來建表,並且將其的前 4 個位置之資料設為 0、3、7、17。之後跑一個 For迴圈 從 4 到 50,並且將 ans[目前位置] 設為 ans[目前位置-1] * 2 + ans[目前位置-2]。

範例程式碼-ZeroJudge B229: 路徑問題

#include <iostream>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    unsigned long long int N, ans[100] = {};
    ans[0] = 0;
    ans[1] = 3;
    ans[2] = 7;
    ans[3] = 17;
    for (int i = 4; i<=50; i++) {
        ans[i] = ans[i-1] * 2 + ans[i-2];
    }
    while (cin >> N) {
        cout << ans[N] << "\n";
    }
}

//ZeroJudge B229
//Dr. SeanXD

發佈留言