1.23-j

小兔的叔叔從外面旅游回來給她帶來了一個禮物,小兔高興地跑回自己的房間,拆開一看是一個棋盤,小兔有所失望。不過沒過幾天發現了棋盤的好玩之處。從起點(0,0)走到終點(n,n)的最短路徑數是C(2n,n),現在小兔又想如果不穿越對角線(但可接觸對角線上的格點),這樣的路徑數有多少?小兔想了很長時間都沒想出來,現在想請你幫助小兔解決這個問題,對於你來說應該不難吧!
Input
每次輸入一個數n(1<=n<=35),當n等於-1時結束輸入。
Output
對於每個輸入數據輸出路徑數,具體格式看Sample。
Sample Input
1
3
12
-1
Sample Output
1 1 2
2 3 10
3 12 416024
卡特蘭數直接打表,用公式的話好像會超出範圍

#include <iostream>
using namespace std;
unsigned long long a[] = { 1,2,5,14,42,132,429,1430,4862,16796,58786,
208012,
742900,
2674440,
9694845,
35357670,
129644790,
477638700,
1767263190,
6564120420,
24466267020,
91482563640,
343059613650,
1289904147324,
4861946401452,
18367353072152,
69533550916004,
263747951750360,
1002242216651368,
3814986502092304,
14544636039226909,
55534064877048198,
212336130412243110,
812944042149730764,
3116285494907301262,
11959798385860453492,
};
int main()
{
	int n, i; i = 1;
	while (cin >> n && n > 0)
	{		
			cout << i << " " << n << " " <<2* a[n-1]<<endl;
			i++;		
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章