有一对可爱的兔子,他们从出生后的第五个月开始,每个月生1对小兔子,新生的小兔子五个月后也会开始生兔子,兔子不会死亡,那么第n个月的时候,会有多少对兔子呢?

有一对可爱的兔子,他们从出生后的第五个月开始,每个月生1对小兔子,新生的小兔子五个月后也会开始生兔子,兔子不会死亡,那么第n个月的时候,会有多少对兔子呢?如第五个月,答案:2对。

首先我们可以写一下由简入难,从第一个月到第四个月都是1对,第五个月开始变成2对,3对,4对,5对,那么第九个月会是6对吗?非也!
第九个月的时候,第五个月出生的1对小兔子。也长大了,迎来了它的第五月,开启了无尽的生娃旅程。所以除了祖宗那1对,又1对加入了生娃大军,所以这个月会增加两对,即变成了7对!
这时候可以发现思路其实非常简单,该月增长的对数,就等于四个月前的那个月的兔子对数。
比方说五月有多少对,九月就增长多少对,五月以后的还没长大,我们应该保存着。
1.队列实现

public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);

        while (reader.hasNextInt()) {
            // 第n月
            int n = reader.nextInt();
            if (n <= 0) {
                System.out.println("非法参数");
                continue;
            }
            // 初始兔子1对 与 增伤对数,初始0
            int rabbitNum = 1;
            int item = 0;
            // 队列存前四个月的数量
            Queue queue = new LinkedList<Integer>();

            // 每次循环的目的是出队四个月前的数量,入队当月数量
            for (int i = 1; i <= n; i ++) {
                // 1,2,3,4月的前四个月什么都没有,直接入队
                if ( i - 4 <= 0){
                    queue.offer(1);
                    continue;
                }
                // 得到四个月前的那个月有多少对
                int poll = (Integer)queue.poll();
                // 增加兔子的对数
                rabbitNum += poll;
                // 存入该月对数
                queue.offer(rabbitNum);
            }
            System.out.println("兔子对数:" +rabbitNum);
        }
    }

2.递归实现

public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        System.out.println(total(n));
    }

    private static int total(int n) {
        if (n<=4) {
            return 1;
        }else {
            return total(n-1)+total(n-4);
        }
    }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值