Java 实现 蓝桥杯 生兔子问题

生兔子问题

有一对兔子,从出生后第四个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子。假如兔子都不死,计算第十个月兔子的总数?

分析:

四个月开始生兔子,则:F(N) = f(n-1)+ f(n-3)。可以运用递归来解决问题。

 

import java.util.ArrayList;
import java.util.List;

public class 生兔子 {
    

    public static void main(String[] args) { 
      //  System.out.println(f(13));
        int n = 13;
        int [] num = new int[14];
        num[1]=1;num[2]=1;num[3]=1;
        for (int i=4;i<=n;i++){
            num[i]=num[i-1]+num[i-3];
        }
        System.out.println(num[n]);
    }

    public static int f(int n){
        if(n==1 || n==2 || n==3){
            return 1;
        }
//        今年的 =   去年的+今年新出生
                //去年的       今年新出生的
        return f(n-1)   +   f(n-3);
    }


 
}


如果当出生后第三个月开始生兔子: F(N) = f(n-1)+ f(n-2)

今年的总数=去年的总数+今年的新出生的兔子,

而今年新出生的兔子=今年成熟了的兔子数量(每只成熟的兔子生一只小兔),

那今年成熟了的兔子数量又是什么呢?其实就是前年的兔子总数,因为前年的兔子,不管几岁,到今年一定成熟,可以生新兔子了。而去年的没有成熟,不能生兔子。

所以今年的总数=去年的总数+前年的总数。

F(n)=F(n-1)+F(n-2)。

这个数列就是1、1、2、3、5、8、13、21、34、……

在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

 
(按照上面的改一下就好了)

烦人的来了

但是就有这么一个问题:兔子也会死

出生到死亡只有三年,即n年出生,n+3年死去。

出生一年以后可以生育,也就是n+1年开始生育,一年可以生一只宝宝。

这时我们换一个思路:

定义f(n)为第n年新出生的动物个数,则f(n)=f(n-1)+f(n-2),前两项为1,而每年的总数也就是三项求和而已。

每年出生的数量为1,1,2,3,5,8,13,21

每年兔子的总数是 1,2,4,6,10,16,26,42

posted @ 2020-02-13 21:25  南墙1  阅读(57)  评论(0编辑  收藏  举报