C语言 · 瓷砖铺放
算法训练 瓷砖铺放
时间限制:1.0s 内存限制:512.0MB
锦囊1
递归或递推。
问题描述
有一长度为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
编程用递归的方法求解上述问题。
例如,长度为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 思路: 3 当地板长度大于等于2时有两种瓷砖可以选择; 4 否则只能选择长度为1的瓷砖。 5 由此进行递归,当地板长度为0时,结束。 6 */ 7 #include<stdio.h> 8 int n,sum; 9 int ans; 10 void dfs(int sum){ 11 if(sum==0){//出口 12 ans++; 13 return; 14 } 15 if(sum>=2){//当地板长度大于等于2时接下来有两种选择 16 dfs(sum-1); 17 dfs(sum-2); 18 }else{//否则只能选用长度为1的瓷砖 19 dfs(sum-1); 20 } 21 } 22 int main(){ 23 scanf("%d",&n); 24 dfs(n); 25 printf("%d",ans); 26 return 0; 27 }