算法训练

﹏ヽ暗。殇╰゛Y 2022-05-03 08:56 340阅读 0赞

问题描述
  有一长度为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两种可能,如果长度超出n就是达到递归的边界,等于n就是一种解,然后使用递归再次进行求解,直到满足要求的值都求出。
代码实现:

  1. #include<stdio.h>
  2. int cnt = 0, n;
  3. void dg(int s)
  4. {
  5. if (s>n)
  6. return;
  7. if (s == n)
  8. cnt++;
  9. dg(s + 1);
  10. dg(s + 2);
  11. }
  12. int main()
  13. {
  14. scanf("%d", &n);
  15. dg(0);
  16. printf("%d\n", cnt);
  17. return 0;
  18. }

运行结果:
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,340人围观)

还没有评论,来说两句吧...

相关阅读

    相关 算法训练 排序

    > 问题描述 >   编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列。 >   输入格式:输入只有一行,即三个整数,中间用空格隔开。 >  

    相关 算法训练

    问题描述   有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限。要将这个长度为N的地板铺满,一共有多少种不同的铺法?  

    相关 算法训练 表达式计算

    问题描述   输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。 输入格式   输入一行,包含一个表达式。 输出格式   输出这个表达式的值。

    相关 算法训练 操作格子

    问题描述 有n个格子,从左到右放成一排,编号为1-n。 共有m次操作,有3种操作类型: 1.修改一个格子的权值, 2.求连续一段格子权值和, 3.求连续一段格子的最大