杭电ACM 2046 骨牌铺方格 递推类

骨牌铺方格

Problem Description
在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.
例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:
杭电ACM <wbr>2046 <wbr>骨牌铺方格 <wbr>递推类

Input

输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是2×n (0<n<=50)。

Output

对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。

Sample Input

1
3
2

Sample Output

1
3
2
分析:

从图中也可以观察出来,第N张牌的排列可以又N-1张牌的排列再在末尾加上一张竖的牌。这样依然合法。
也可以在N-2张合法排列的牌后面加上两张横着放的牌(如果竖着放就和上面一种重复了)。
所以f(n) = f(n-1) + f(n-2)
即又是一个斐波那契数列。
我的代码:
 
C++语言:
#include<stdio.h>
int main()
{
_int64 a [ 50 ] = { 1 , 2 };
int i ,n;
for( i = 2; i < 50; i ++)
a [ i ] = a [ i - 1 ] + a [ i - 2 ];
while( scanf( "%d" , &n) != EOF)
printf( "%I64d \n " , a [n - 1 ]);
}

你可能感兴趣的:(杭电ACM 2046 骨牌铺方格 递推类)