问题描述
有 2*n 的一个长方形方格,用一个1*2 的骨牌铺满方格,示例如下:
编写一个程序,试对给出的任意一个n(n>0), 输出铺法总数。
分析:
当n=1时,方格数为2,有1种铺法;
当n=2时,方格数为4,有2种铺法;
当n=3时,方格数为6,有3种铺法;
当n=4时,方格数为8,有5种铺法。
可得规律:
f(1) = 1;
f(2) = 2;
…
f(n) = f(n-1)+f(n-2) (n>2)
代码如下:
#include <iostream>
using namespace std;
int main()
{
int a[100] = {0}; //存储方法数
a[1] = 1;
a[2] = 2;
int n; //骨牌格数量 2*n
cin>>n;
for(int i=3;i<=n;i++){
a[i] = a[i-1]+a[i-2];
}
cout<<a[n]<<endl;
}