zoukankan      html  css  js  c++  java
  • 升级版爬楼梯问题

    1 一个台阶有n阶,如果一次可以跳1阶,也可以跳2阶,求总共有多少种跳法?

    思考:
    当楼梯为1阶时,1【1种跳法】;
    当楼梯为2阶时,有1+1  2 【2种跳法】
    当楼梯为3阶时,有1+1+1 1+2(改变2的位置2次)【3种跳法】
    当阶梯为4阶时,有1+1+1+1 2+1+1 (改变2的位置3次) 2+2【5种跳法】
    当阶级为5阶时,有1+1+1+1+1,2+1+1+1(改变2的位置4次) 2+2+1(改变1的位置3次)【8种跳法】
    当阶梯为6阶时,有1+1+1+1+1+1,2+1+1+1+1(改变2的位置5次) 2+2+1+1(互换6次) 2+2+2【13种跳法】
    -----------------------------------------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------------------------------------------
    当阶梯数为n阶时,有f(n)=f(n-1)+f(n-2) (n>=3);
    代码实现:
    1 int stair(int n)//楼梯跳法函数
    2 {
    3      if(n==1) return 1;
    4      if(n==2) return 2;
    5     else
    6     return stair(n-1)+stair(n-2);
    7 }
    2 一个台阶有n阶,如果一次可以跳1阶,也可以跳2阶,---------最多跳m阶(m<=n),求总共有多少种跳法?
    还是按照上述分析:
    a.当m=3时,
    当楼梯为1阶时,1种跳法;
    当楼梯为2阶时,2种跳法;
    当楼梯为3阶时,4种跳法;
    当楼梯为4阶时,7种跳法;
    当楼梯为5阶时,13种跳法;
    当楼梯为6阶时,24种跳法;
    ---------------------------
    ---------------------------
    当楼梯为n阶时,有f(n)=f(n-1)+f(n-2)+f(n-3) (n>=4)
     
    b.m=4时,
    当楼梯为1阶时,1种跳法;
    当楼梯为2阶时,2种跳法;
    当楼梯为3阶时,4种跳法;
    当楼梯为4阶时,8种跳法;
    当楼梯为5阶时,15种跳法;
    当楼梯为6阶时,29种跳法;
    ---------------------------
    ---------------------------
    当楼梯为n阶时,有f(n)=f(n-1)+f(n-2)+f(n-3) +f(n-4)(n>=5)
     
    c.m=5时,
    当楼梯为1阶时,1种跳法;
    当楼梯为2阶时,2种跳法;
    当楼梯为3阶时,4种跳法;
    当楼梯为4阶时,8种跳法;
    当楼梯为5阶时,16种跳法;
    当楼梯为6阶时,31种跳法;
    ---------------------------
    ---------------------------
    当楼梯为n阶时,有f(n)=f(n-1)+f(n-2)+f(n-3) +f(n-4)+f(n-5)(n>=6)
     
    d.当m<n时,假设m=5,n=9时;
    当楼梯为1阶时,2^0种跳法;
    当楼梯为2阶时,2^1种跳法;
    当楼梯为3阶时,2^2种跳法;
    当楼梯为4阶时,2^3种跳法;
    当楼梯为5阶时,2^4种跳法;
    当楼梯为6阶时,f(6)=f(1)+f(2)+f(3)+f(4)+f(5);
    当楼梯为7阶时,f(7)=f(2)+f(3)+f(4)+f(5)+f(6)=2*f(6)-f(1);
    当楼梯为8阶时,f(8)=f(3)+f(4)+f(5)+f(6)+f(7)=2*f(7)-f(2);
    当楼梯为9阶时,f(9)=f(4)+f(5)+f(6)+f(7)+f(8)=2*f(8)-f(3);
     1 long stair(const int n, const int m, long * const f) 
     2 {  
     3     int i; 
     4     f[0] = f[1] = 1; 
     5     for (i = 2; i <= m; ++ i) 
     6         f[i] = f[i - 1] * 2; 
     7     for (i = m + 1; i <= n; ++ i) 
     8         f[i] = f[i - 1] * 2 - f[i - m - 1]; 
     9     return f[n]; 
    10 }
     
     
  • 相关阅读:
    【Day3】4.Xpath语法与案例
    【Day3】3.提取商城分类结构
    【Day3】2.re模块使用案例
    【Day3】1.正则表达式
    【Day2】4.第三方模块的安装与使用
    【Day2】3.面向对象编程
    【Day2】2.函数
    【Day2】1.循环结构
    命令行切换目录
    D
  • 原文地址:https://www.cnblogs.com/wxdjss/p/5450749.html
Copyright © 2011-2022 走看看