2046 骨牌鋪方格

 這是以前寫的代碼,好久沒看,忘了當初是怎麼寫出這個公式來的了。。由此可見寫解題報告的重要性啊!哪怕寫個註釋也好呀。

#include<iostream>
#include <stdio.h>
using namespace std;

int main()
{
	int n, i, k, j;
	double a, b;
	while (cin>>n)
	{
		k = n / 2;
		b = 0;
		for (i=0; i<=k; i++)
		{
			a = 1;
			for (j=0; j<i; j++)
			{
				a *= ((n -2 *i +1 +j)* 1.0 /(j +1));
			}
			b += a;
		}
		printf("%.0f\n", b);
	}
}

不過剛剛想了下,想到了另一種遞歸的方法。

從大概中間的那個位置切開,

公式如下:

                    F(n/2) * F(n/2) + F(n/2-1) * F(n/2-1)         (當n爲偶數時)   

F(n) = {

                    F(n/2) * F(n/2-1) * 2 + F(n/2) * F(n/2)      (當n爲奇數時)

PS:n/2爲計算機上的n/2。

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