1. 程式人生 > >杭電 2067 小兔的棋盤

杭電 2067 小兔的棋盤



Problem Description   小兔的叔叔從外面旅遊回來給她帶來了一個禮物,小兔高興地跑回自己的房間,拆開一看是一個棋盤,小兔有所失望。不過沒過幾天發現了棋盤的好玩之處。從起點(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 <stdio.h>

int main(void)
{
	int i, j;
	__int64 a[36] = {1};
	__int64 b[36] = {0};
	for (i = 1; i < 36; i++)
	{
		for (j = 1; j < i; j++)
			a[j] += a[j-1];
		b[i] = a[i] = a[i-1];
	}

	for (j = 1; scanf("%d", &i), i+1; j++)
		printf("%d %d %I64d\n",j, i, 2 * b[i]);
	
	return 0;
}