递推问题(NUBT1077—骨牌铺方格)
程序员文章站
2024-02-15 10:56:04
...
1.NUBT1077—骨牌铺方格
在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.
例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:
解题思路:
(1)首先我们观察2*1的情况,(如图(1))这种情况下只有这一种解决方案,水平与垂直只是放置问题:
(2)在研究2*2的情况,(如图(2)、(3))这种情况分为两种:
(3)以此类推,我们可以发现,首先设置a[n]数组来记录,a[1]=1,a[2]=2,表示2*1和2*2情况的个数,
可以发现递推公式:a[n]=a[n-1]+a[n-2]。
图(1)、(2)、(3)
主要代码:
#include<stdio.h>
int main()
{
int i,x;
long long int a[100];
while(scanf("%d",&x)!=EOF)
{
a[1]=1;
a[2]=2;
for(i=3;i<=x;i++)
{
a[i]=a[i-1]+a[i-2];
}
printf("%I64d",a[x]);
}
}