一只兔子 ,在第 5 到 10 天每天生一只,第 10 天后死亡,开始有 1 只兔子,问第 100 天有几只兔子.

{{ time }}

代码如下

PHP版本:

<?php
function getRabbit($day)
{
    /**
     * 初始数组: 用于统计每个年龄的兔子有几只
     *   1. 键表示 年龄(几天大)
     *   2. 值表示 该年龄的兔子的数量
     */
    $arr = [
        1 => 1,
        2 => 0,
        3 => 0,
        4 => 0,
        5 => 0,
        6 => 0,
        7 => 0,
        8 => 0,
        9 => 0,
        10 => 0
    ];

    //从第2天开始触发循环
    for ($i = 0; $i < $day - 1; $i++) {
        //先保存昨天记录
        $yesterday = $arr;

        /**
         * 遍历而生成今天兔子年龄的统计情况:
         *  1. 今天1天大的兔子数量, 是昨天4-9天大的兔子的数量的总和, 因为它们今天都到了生育年龄, 各生了1只兔子
         *  2. 好比: 昨天2天大的兔子, 就是今天3天大的兔子
         */
        foreach ($arr as $k => $v) {
            $arr[$k] = $k == 1 ? $yesterday[4] + $yesterday[5] + $yesterday[6] + $yesterday[7] + $yesterday[8] + $yesterday[9] : $yesterday[$k - 1];
        }
    }

    //返回兔子总数
    return array_sum($arr);
}


echo getRabbit(100);//第100天有3040556004272只兔子

JS版本:

<script>
    function getRabbit(day) {
         /**
         * 初始对象: 用于统计每个年龄的兔子有几只
         *   1. 键表示 年龄(几天大)
         *   2. 值表示 该年龄的兔子的数量
         */
        let obj = {
            1: 1,
            2: 0,
            3: 0,
            4: 0,
            5: 0,
            6: 0,
            7: 0,
            8: 0,
            9: 0,
            10: 0
        };

        //从第2天开始触发循环
        for (let i = 0; i < day - 1; i++) {
            //先保存昨天记录: 先压缩再解压, 是为了yesterday和obj不成为1个对象
            let yesterday = JSON.parse(JSON.stringify(obj));

            /**
             * 遍历而生成今天兔子年龄的统计情况:
             *  1. 今天1天大的兔子数量, 是昨天4-9天大的兔子的数量的总和, 因为它们今天都到了生育年龄, 各生了1只兔子
             *  2. 好比: 昨天2天大的兔子, 就是今天3天大的兔子
             */
            for (let k in obj) {
                obj[k] = k == 1 ? yesterday[4] + yesterday[5] + yesterday[6] + yesterday[7] + yesterday[8] + yesterday[9] : yesterday[k - 1];
            }
        }

        //返回兔子总数
        let sum = 0
        for (let k in obj) {
            sum += obj[k]
        }
        return sum
    }


    console.log(getRabbit(100)); //第100天有3040556004272只兔子
</script>