遞推問題(NUBT1077—骨牌鋪方格)

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]);
  }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章