瓷磚鋪放
題目
資源限制時間限制:1.0s 內存限制:512.0MB
問題描述
有一長度爲N(1<=N<=10)的地板,給定兩種不同瓷磚:一種長度爲1,另一種長度爲2,數目不限。要將這個長度爲N的地板鋪滿,一共有多少種不同的鋪法?
例如,長度爲4的地面一共有如下5種鋪法:
4=1+1+1+1
4=2+1+1
4=1+2+1
4=1+1+2
4=2+2
編程用遞歸的方法求解上述問題。輸入格式,只有一個數N,代表地板的長度輸出格式。輸出一個數,代表所有不同的瓷磚鋪放方法的總數
思路:
一開始,我想在遞歸裏用一個for循環來取1和2,但是最後沒寫出來。後來又讀了一遍題目,發現這題只是讓你輸出最後的種數,並沒有輸出每種方法的組合,於是只需要對遞歸的出口和遞歸的1和2分別順序執行即可,採用正序遞歸,從0開始。
c++代碼:
//藍橋杯-瓷磚鋪路-2020/04/20
#include<iostream>
using namespace std;
int n;//瓷磚的長度
int ret = 0;//統計方案數
//遞歸
void dfs(int t){
//如果當前層大於n,則退出
if (t > n)
return;
//當前層等於n,計數
if (t == n){
ret++;
return;
}
//遞歸+1的
dfs(t + 1);
//遞歸+2的
dfs(t + 2);
}
int main()
{
cin >> n;
//從0開始遞歸
dfs(0);
cout << ret << endl;
return 0;
}
由於博主一開始用for循環來取1和2,沒寫出來。參考了網上的代碼,發現自己菜的扣jio。希望此文對大家認識遞歸有所幫助吧!