HDU_oj_2046 骨牌鋪方格
阿新 • • 發佈:2017-12-13
bottom 長方形 size acm output mes ace itl body Problem Description
在2×n的一個長方形方格中,用一個1× 2的骨牌鋪滿方格,輸入n ,輸出鋪放方案的總數.
例如n=3時,為2× 3方格,骨牌的鋪放方案有三種,如下圖:
Input 輸入數據由多行組成,每行包含一個整數n,表示該測試實例的長方形方格的規格是2×n (0<n<=50)。 Output 對於每個測試實例,請輸出鋪放方案的總數,每個實例的輸出占一行。
①第n個規格的前一個如果是豎放,則這種情況有F(n-1)種
②第n個規格是兩個橫放的,則這種情況有F(n-2)種
所以,F(n)=F(n-1)+F(n-2)
註意點:
例如n=3時,為2× 3方格,骨牌的鋪放方案有三種,如下圖:
Input 輸入數據由多行組成,每行包含一個整數n,表示該測試實例的長方形方格的規格是2×n (0<n<=50)。 Output 對於每個測試實例,請輸出鋪放方案的總數,每個實例的輸出占一行。
Sample Input
1 3 2 Sample Output 1 3 2 分析: 又是典型的遞歸問題 第n個規格的種數取決於第n-1個的規格和第n-2個的規格 兩種情況1 //遞歸解法,但不是遞歸寫法 2 #include<iostream> 3 using namespace std; 4 5 int main() 6 { 7 int n; 8 long long fx,fy,fz; 9 while(cin>>n) 10 { 11 fx=1;fy=2; 12 if(n==1) 13cout<<fx<<endl; 14 else if(n==2) 15 cout<<fy<<endl; 16 else 17 { 18 n-=2; 19 while(n--) 20 { 21 fz=fy+fx; 22 fx=fy; 23 fy=fz; 24 } 25 cout<<fz<<endl;26 } 27 } 28 }
HDU_oj_2046 骨牌鋪方格