猴子爬山问题、爬楼梯问题等

猴子爬山问题求解

  • 问题描述:一个顽皮的猴子在一座50级的台阶的小山上爬山跳跃,上山时需要从山脚至山顶网上跳50级台阶,一步可跳2级,或跳3级,或跳4级,求上山有多少种不同的跳法?下山时从山顶至山脚往下跳50级台阶,一步
    可跳1级,或者2级,或者3级,求下山有多少种不同的跳法?
public class MonkeyMout2 {
    public static void main(String[] args){
        double way[]=new double[52];
        //上山初始化
        way[1]=0;
        way[2]=1;
        way[3]=1;
        way[4]=2;
        for(int i=5;i<=50;i++){
            way[i]=way[i-2]+way[i-3]+way[i-4];
        }
        System.out.printf("上山的跳法:%.0f\n",way[50]);
        way[1]=1;
        way[2]=2;
        way[3]=4;
        for (int i=4;i<=50;i++){
            way[i]=way[i-1]+way[i-2]+way[i-3];
        }
        System.out.printf("下山的跳法:%.0f\n",way[50]);

    }
}

上山的跳法:72581632
下山的跳法:10562230626642

Process finished with exit code 0

爬楼梯问题,类似猴子爬山问题

问题描述:假设你正在爬楼梯,需要n阶你才能到达楼顶。每次你可以爬1或者2个台阶, 你有多少种不同的方法可以爬到楼顶??
此类问题和猴子爬山的问题是一种类型的问题

public class ClimbThestairs {
    public static void main(String[] args){

        Scanner input=new Scanner(System.in);
        System.out.println("请输入你要爬的楼梯台阶数:");
        int n=input.nextInt();
        double way[]=new double[n+1];
        //爬楼梯初始化
        way[0]=0;
        way[1]=1;
        way[2]=2;
        for (int i=3;i<=n;i++){
            way[i]=way[i-1]+way[i-2];
        }
        System.out.printf("爬楼梯的步骤一共有:%.0f种方法\n",way[n]);
    }
}

请输入你要爬的楼梯台阶数:
56
爬楼梯的步骤一共有:365435296162种方法

Process finished with exit code 0
在写这个简单的代码的过程中,发现了一个问题出现了数组下标越界异常的问题,原因是double way[]=new double[n+1]这步,我将new double[ ]中填的数为n,就出现了的这个问题。后来自己仔细思考了一下,new double[ ]中的数表示数组的长度,当为n时,表示数组长度为n,台阶数最大为n-1,而我们输入的最大台阶数为n,故此出现了错误。

你可能感兴趣的:(猴子爬山问题,爬楼梯问题,递推关系)