问题描述
有一长度为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;
}
本文介绍了一种使用递归算法解决特定长度地板上不同瓷砖铺法数量的问题。通过实例解析,详细展示了如何利用递归思想计算长度为N的地板可以有多少种不同的铺砖方式。
804

被折叠的 条评论
为什么被折叠?



