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

  • 相关阅读:
    (算法)最长重叠线段或区间
    (算法)判断两个区间是否重叠
    (笔试题)洗牌算法
    (笔试题)和一半的组合数
    (笔试题)删除K位数字
    (C语言)memcpy函数原型的实现
    每天坚持10分钟,改变你的人生
    你是哪种层次的程序员?程序员的四种类型
    2012年,软件开发者薪资大调查
    上班族:不要让自己成为老板的“日用品”!
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075722.html
Copyright © 2011-2022 走看看