在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.
例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:
(请自行脑补~~)
Input
输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是2×n (0<n<=50)。
Output
对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。
Sample Input
1
3
2
Sample Output
1
3
2
分析:我尝试着按照帽子师兄教给我的思路去解决,就是想这中形式可以由多少种之前的形式解决,但是并没有想出正确的东西,无奈之下只能百度,一看,哇,从字群里面钻出来一个光头吴克(正确思路),原来就是看最后一个牌,n个牌的方式一共有,当第n个牌是竖着的时候,前面n-1个牌的摆放方式+当第n个牌和n-1个牌一起躺好(如二)的时候,前面n-2个牌的摆放方式之和,然后我再结合b题的经验,一下就弄出来了。
这个故事告诉我们,没有思路,这种题真的写不出来啊。
ac代码
#include <iostream>
#include<string>
using namespace std;
int main()
{
int b;
while (cin >> b)
{
long long a[55] = { 0 };
a[1] = 1;
a[2] = 2;
a[3] = 3;
if (b >= 4)
{
for (int i = 4;i <= b;i++)
a[i] = a[i - 1] + a[i - 2];
}
cout << a[b] << endl;
}
}