在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.

例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:

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

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

思路

假设用a[i]表示2*i的方格一共有组成的方法数,我们知道a[1]=1a[2]=2;

放第n的时候,可在n-2的情况下在最右边横着放两块,有a[n-2]种情况,

也可在n-1的情况下在最右边竖着放一块,有a[n-1]种情况.

故:a[n]=a[n-2]+a[n-1]

AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;

long long a[51];

int main(){
int n;
a[1] = 1;
a[2] = 2;
while(scanf("%d",&n)!=EOF){
for (int i = 3; i <= n; i++){
a[i] = a[i - 2] + a[i - 1];
}
printf("%lld\n", a[n]);
}
return 0;
}