题目大意:在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.
例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:
解题思路:斐波拉契数列。每次看方格中的最后一列方格,它要么是由一个骨牌竖着放的,要么就是由两个骨牌横着放的,如果是前一种,则是f(n-1),如果是后一种,就是f(n-2);
代码:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
long long int a[51];
a[0]=0;
a[1]=1;
a[2]=2;
for(int i=3;i<51;i++)
{
a[i]=a[i-1]+a[i-2];
}
int n;
while(cin>>n)
{
cout<<a[n]<<endl;
}
return 0;
}
遇到的问题:忽略了数据类型的范围,应该用long long int 。