M - 骨牌铺方格
在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.
例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:
Input输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是2×n (0<n<=50)。 例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:
Output对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。
Sample Input
1 3 2Sample Output
1 3
2
题解:首先大概猜到这是一道找规律的题,接下来便是讨论2*n的情况与前面2*(n-1)等的联系。骨牌数目为n时相当于是在骨牌数为(n-1)的尾端增加了一张竖牌;同时也相当于在骨牌数为(n-2)的尾端增加了两张横牌,着很容易便能联想到之前做的“超级楼梯”的题,可以说是是完全一样的性质,所以得到
f(n)=f(n-1)+f(n-2),初始化:f(1)=1,f(2)=2;
代码如下:
#include<stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int main() { int n,i; long long int a[55]; //必须用长整型数据,不然过不了 a[1]=1; a[2]=2; for(i=3; i<=50; i++) a[i]=a[i-1]+a[i-2]; while(scanf("%d",&n) != EOF) { printf("%lld\n",a[n]); } return 0; }