藍橋杯算法題解 歷屆試題 瓷磚鋪放

題目描述

問題描述
  有一長度爲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,代表地板的長度
輸出格式
  輸出一個數,代表所有不同的瓷磚鋪放方法的總數
樣例輸入
4
樣例輸出
5

題解:

其實就是給定一個整數,求出這個數能被1、2兩個數組成的個數,**思路:**遞歸,當tmp >= n就表示不要繼續加了,其中如果有tmp == n就方法總數加1。

代碼:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cstring>
#include <string>
#include <algorithm>
#include <vector>
#include <deque>
#include <list>
#include <utility>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <bitset>
#include <iterator>
using namespace std;

typedef long long ll;
const int inf = 0x3f3f3f3f;
const ll  INF = 0x3f3f3f3f3f3f3f3f;
const double PI = acos(-1.0);
const double E = exp(1.0);
const int MOD = 1e9+7;
const int MAX = 1e5+5;

int n;
int sum = 0;

void func(int tmp)
{
    if(tmp >= n)
    {
        if(tmp == n)
            sum++;
        return;
    }
    func(tmp+1);
    func(tmp+2);
}

int main()
{
    /*
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    */
    cin >> n;
    func(0);
    cout << sum << endl;

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