【生兔子问题】

这道题的思路有多种,可以使用递归,也可以使用动态规划,在这里我们使用动态规划的思路为大家分析这道题:

我们分析题意不难知道:每只兔子自出生的前两个月是不会生下新的兔子的,从第三个月开始每个月都会生下一只兔子。这是这道题解题的核心。

第一个月兔子的数量为一只(记为A),第二个月兔子的数量为一只,第三个月这只兔子产下了一只兔子(记为B),此时具有两只兔子(A、B),第四个月时,为B出生的第一个月,故B不产子,A仍产子,此时产子记为C,共有三只兔子(A、B、C),第五个月时,B已经出生够两月,故此时B也开始产子,记为D,A仍产子记为E,此时共有五只兔子(A、B、C、D、E).......以此类推,不难发现,每个月的兔子数量为前两月兔子数量的总和。类似于斐波那契数列。

 JAVA代码如下:

public class Main4 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        int ret = judge(num);
        System.out.println("ret=" + ret);
    }

    private static int judge(int num) {
        int[] arr = new int[num];
        arr[0] = 1;
        arr[1] = 1;
        int i = 2;
        while (i < num) {
            arr[i] = arr[i - 1] + arr[i - 2];
            i++;
        }
        return arr[arr.length - 1];
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值