1.题目
在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
2.正确代码
#include <iostream>
using namespace std;
int main()
{
long long arr[101];
int i,n;
arr[1]=1;
arr[2]=2;
while( cin >> n && n )
{
for(i=3;i<=n;i++)
arr[i]=arr[i-1]+arr[i-2];
cout << arr[n] <<endl;
}
return 0;
}
3.思路解读:
我们明确每个代表的可能性,这是关于递推的,x[i]=x[i-1]+x[i-2],但我们又会很好奇,为什么不是x[i]=x[i-1]+x[i-2]+x[i-3]呢?我们需要从头开始理解,x[3]能被x[1]+x[2]来递推到,对于x[3],只关注新加入的一格中方块的方法,只有两种可能,一旦确定下来,之后的可能就是前面的某一种可能,只要确定好这层逻辑关系,那么这道题其实很好解的。
本文探讨了在2xn的长方形方格中使用1x2骨牌铺满方格的所有可能方案,并通过递推公式实现了算法。文章提供了一个有效的C++程序实现,能够输出任意给定n值的铺放方案总数。
590

被折叠的 条评论
为什么被折叠?



