劍指OFFER之矩形覆蓋(九度OJ1390)

題目描述:

咱們能夠用2*1的小矩形橫着或者豎着去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?測試

 

輸入:

輸入可能包含多個測試樣例,對於每一個測試案例,spa

輸入包括一個整數n(1<=n<=70),其中n爲偶數。code

 

輸出:

對應每一個測試案例,blog

輸出用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有的方法數。io

 

樣例輸入:

4

樣例輸出:

5

解題思路:

  觀察題目中的矩形,2*n的,是個長條形。原本腦中想象的是複雜的華容道,可是既然只是簡單的長條形,那麼依然逆向分析。既然是長條形的,那麼從後向前,最後一個矩形2*2的,只有兩種狀況:
    第一種是最後是由一個2*(n-1)的矩形加上一個豎着的2*1的矩形
  另外一種是由一個2*(n-2)的矩形,加上兩個橫着的2*1的矩形
  所以咱們能夠得出,
  第2*n個矩形的覆蓋方法等於第2*(n-1)加上第2*(n-2)的方法。使用代碼能夠表示爲:
for(i=3;i<71;i++){ arr[i] = arr[i-1]+arr[i-2]; }

  仍然要注意數據類型,爲long long型class

代碼:

#include <stdio.h>
long long arr[71] = {0,1,2}; void createArr(void){ int i; for(i=3;i<71;i++){ arr[i] = arr[i-1]+arr[i-2]; } } int main(void){ int n; createArr(); while(scanf("%d",&n) != EOF && n>=1 && n<=70){ printf("%lld\n",arr[n]); } return 0; } /************************************************************** Problem: 1390 User: xhalo Language: C Result: Accepted Time:0 ms Memory:916 kb ****************************************************************/
相關文章
相關標籤/搜索