两个经典逻辑基础题——不死神兔和百钱白鸡

5 篇文章 0 订阅

问题

  1. 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子, 假如兔子都不死,问第二十个月的兔子对数为多少?

  2. 我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

问题分析

问题一思路:

  1. 为了存储多个月的兔子对数,定义一个数组,用动态初始化完成数组元素的初始化,长度为20
  2. 因为第1个月,第2个月兔子的对数是已知的,都是1,所以数组的第1个元素,第2个元素值也都是1 .
  3. 用循环实现计算每个月的兔子对数 4:输出数组中最后一个元素的值,就是第20个月的兔子对数。

问题二思路:

  1. 第1层循环,用于表示鸡翁的范围,初始化表达式的变量定义为 x=0,判断条件是x<=20
  2. 第2层循环,用于表示鸡母的范围,初始化表达式的变量定义为 y=0,判断条件是y<=(100 - 5 * x) / 3 (因为外层循环中鸡公已经花掉了一部分买鸡的钱,是已知的.)
  3. 这个时候,用于表示鸡雏的变量 z = 100 – x – y
  4. 判断表达式 z%3==0 和表达式 5x + 3y + z/3 = 100 是否同时成立,如果成立,输出 对应的 x,y,z 的值,就是对应的鸡翁,鸡母,鸡雏的值。

附上两组代码:

public class Test04 {
    public static void main(String[] args) {
        int[] arr = new int[20];

        // 因为第1个月,第2个月兔子的对数是已知的,都是1,所以数组的第1、2个元素值也都是1。
        arr[0] = 1;
        arr[1] = 1;
        // 后面几个月每一个元素是前两个元素的相加。
        for (int i = 2; i < arr.length; i++) {
            arr[i] = arr[i - 2] + arr[i - 1];
        }
        System.out.println("第二十个月兔子的对数为:" + arr[arr.length - 1]);
    }
}
public class Test05 {
    public static void main(String[] args) {
        System.out.println("有以下几种方案:");
        // 用两层循环控制鸡公、鸡母的范围,里面加条件。
        for (int x = 0; x < 20; x++) {

            for (int y = 0; y < (100 - 5 * x) / 3; y++) {

                if ((100 - x - y) % 3 == 0 && 5 * x + 3 * y + (100 - x - y) / 3 == 100) {
                    System.out.println("鸡翁的个数为:" + x + " ,鸡母的个数为:" + y + ",鸡雏的个数为:" + (100 - x - y));
                }
            }
        }
    }
}

ps: 总结发现规律是解题的关键!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值