zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    变量的创建和初始化
    HDU 1114 Piggy-Bank (dp)
    HDU 1421 搬寝室 (dp)
    HDU 2059 龟兔赛跑 (dp)
    HDU 2571 命运 (dp)
    HDU 1574 RP问题 (dp)
    HDU 2577 How to Type (字符串处理)
    HDU 1422 重温世界杯 (dp)
    HDU 2191 珍惜现在,感恩生活 (dp)
    HH实习 acm算法部 1689
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075722.html
Copyright © 2011-2022 走看看