zoukankan      html  css  js  c++  java
  • 青蛙跳台阶

    一、一只青蛙一次可以跳1级台阶,也可以跳2级台阶,计算该青蛙跳上一个n级台阶总共有多少种跳法

    第一种方法:(python)

    def f(n):
        t1=1 
        t2=2 
        s=0
        for i in range(3,n+1):
            s=t1+t2
            t1=t2
            t2=s
        return s
    def jump(n):
        if n<=2:
            return n
        else:
            return f(n)
    n = eval(input())
    s = jump(n)
    print(s)
    

     

    第二种方法:(python)  使用递归方法,这种方法虽然简单,但效率低,会超过时间上限

    def tf(n):
        if n==1:
            return 1
        elif n==2:
            return 2
        else:
            return tf(n-1)+tf(n-2)
     
    n = int(input('请输入台阶数(正整数):'))
    tf_n = tf(n)
    print(tf_n)
    

    第三种方法:(Python)用循环代替递归,比第二种方法的代码效率上有较大的提升

    def climbStairs(n):
        if n==1 or n==2:
            return n
        a=1;b=2;c=3
        for i in range(3,n+1):
            c=a+b;a=b;b=c
        return c
        
    n = int(input('请输入台阶数(正整数):'))
    climbStairs_n = climbStairs(n)
    print(climbStairs_n)
    

      

    第四种方法:(python)利用组合数公式

    def climbStairs(n):
        def fact(n):
            result=1
            for i in range(1,n+1):
                result*=i
            return result
        total=0
        a=int(n/2+1)
        for i in range(a):
            total+=fact(i+n-2*i)/fact(i)/fact(n-2*i)
        return total 
        
    n = int(input('请输入台阶数(正整数):'))
    climbStairs_n = climbStairs(n)
    print(climbStairs_n)
    

      

    第五种方法:(C语言)

    # include <stdio.h>
    int tiaofa(int n)
    {
        int i, tf1, tf2, tf3;
        tf1 = 1;
        tf2 = 2;
        
        if (n == 1)
            tf3 = 1;
        else if (n ==2)
            tf3 = 2;
        else
        {
            for (i=3; i<=n; i++)
            {
                tf3 = tf1 + tf2;
                tf1 = tf2;
                tf2 = tf3;
            }
        }
        
        return tf3;
    }
     
    int main(void)
    {
        int n;
        char ch;
        do
        {
            printf("请输入台阶数(正整数):");
            scanf("%d", &n);
            printf("%d个台阶有%d种跳法。
    ", n, tiaofa(n));
            printf("
    你想继续吗(Y/N):");
            flushall();
            scanf("%c", &ch);
        } while (ch=='y' || ch=='Y');
        return 0; 
    }
    

    二、一只青蛙一次可以跳上1级台阶,可以跳上2级台阶,.......,也可以跳上n级台阶,计算该青蛙跳上一个n级台阶总共有多少种跳法

    def jumpFloorII(number):
        if number == 0:
            return 0
        if number == 1:
            return 1
        a = 1
        ret = 1
        for i in range(2,number+1):
            ret = 2 * a
            a = ret
        return ret
        
    number = int(input('请输入台阶数(正整数):'))
    climbStairs_n = jumpFloorII(number)
    print(climbStairs_n)
    

     

      

  • 相关阅读:
    Asp.net Mvc 中的模型绑定
    ActionResult 之HttpGet HttpPost
    Asp.net MVC 之 ActionResult
    Amazon MWS 上传数据 (三) 提交请求
    Amazon MWS 上传数据 (二) 构造请求
    Amazon MWS 上传数据 (一) 设置服务
    linq常用
    Nacos入门
    Post 方法参数写在body中和写在url中有什么区别
    强密码(必须包含字母、数字、特殊字符,长度8到16位)
  • 原文地址:https://www.cnblogs.com/cnn-ljc/p/12712965.html
Copyright © 2011-2022 走看看