java经典逻辑编程题之不死神兔

题目:有一个很有名的数学逻辑题叫做不死神兔问题。有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?

方法一之找规律

在这里插入图片描述
通过这张图,我们可以明确的看到,一月有一只兔子,二月有一只,三月有两个,四月有五只。。。。。
得到一组数据(1,1,2,3,5,8,13…)我们可以发现,从三月开始,兔子数量为上两月之和。

那么就能操作了:
①定义一个数组
②将一月和二月的兔纸数量赋值
③循环计算每个月兔纸数量
④输出

参考代码:

public class Test04 {
    public static void main(String[] args) {
        //为了存储多个月的兔子对数,定义一个数组,用动态初始化完成数组元素的初始化,长度为20
        int[] arr = new int[20];
        //因为第1个月,第2个月兔子的对数是已知的,都是1,所以数组的第1个元素,第2个元素值也都是1
        arr[0] = 1;
        arr[1] = 1;
        //用循环实现计算每个月的兔子对数
        for(int x=2; x<arr.length; x++) {
            arr[x] = arr[x-2] + arr[x-1];
        }
        //输出数组中最后一个元素的值,就是第20个月的兔子对数
        System.out.println("第二十个月兔子的对数是:" + arr[19]);
    }
}

方法二之暴力

找规律什么的才不喜欢,还是比较喜欢暴力,当然,暴力也是需要找一点点规律的,不然怎么暴力啊

一月二月三月
第一月100
第二月010
第三月101
第三月111

根据题意,兔子会长大,当兔子长到第三个月的时候,会生一个一月的兔子。因为兔子会长大,由此,可以判断出,下个月新生的兔子数量,将会等于上个月出生的兔子数量,而上个月出生的兔子数量是由二月和三月决定的(因为二月会长成三月),所以下个月新生的兔子数量等于上个月二月加三月之和,而下个月二月的兔子数量自然等于上个月一月兔子的数量,因为长大了,同理,下个月三月的兔子数量等于上个月二月加三月(因为兔子是不死的)。这么多字可能看懵了吧,下面是操作流程

①定义一月、二月和三月的兔子,并赋初值
②定义下个月中一月、二月、三月的兔纸,赋初值为零(这里有个注意事项,我运行过程中才发现的,因为下个月一月的兔子是由上个月二月和三月共同决定的,而下个月的三月的兔子也是由上个月二月和三月决定的,所以他们相等,也就是说下个月的三月兔子是不用定义的)
③定义循环
④输出结果

代码有瑕疵,将就着看吧

public class ImmortalRabbit {
    public static void main(String[] args) {
        int yiyue=1,eryue=0,sanyue=0;
        int yiyueti=0,eryueti=0,sanyueti=0;
        for(int i=0;i<19;i++){
            yiyueti=yiyue;
            eryueti=eryue;
//            sanyueti=sanyue;
            eryue=yiyueti;
            sanyue+=eryueti;
            yiyue=sanyue;
        }
        System.out.println(yiyue+eryue+sanyue);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值