(兔子繁殖问题)有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到三个月后每个月又生一对兔子,假如兔子都不死,问32个月过后的兔子总数为多少?

网上关于这个问题有很多人说这个符合斐波那契数列,但是我个人在推算的时候发现并不是这样的,所以想自己解决这个问题

建立一个兔子类

属性有ID,age

public class rabbit{

  public  $id;

  public  age;

}

第1个月:(id=1,age=1)------------------------------------------------------------------------------------------------------------------------------------------------------------------1

第2个月:(id=1,age=2)------------------------------------------------------------------------------------------------------------------------------------------------------------------1

第3个月:(id=1,age=3)------------------------------------------------------------------------------------------------------------------------------------------------------------------1

第4个月:(id=1,age=4)  (id=2,age=0)------------------------------------------------------------------------------------------------------------------------------------------------2

第5个月:(id=1,age=5)  (id=2,age=1) (id=3,age=0)-------------------------------------------------------------------------------------------------------------------------------3

第6个月:(id=1,age=6)  (id=2,age=2) (id=3,age=1) (id=4,age=0)--------------------------------------------------------------------------------------------------------------4

第7个月:(id=1,age=7)  (id=2,age=3) (id=3,age=2) (id=4,age=1) (id=5,age=0)---------------------------------------------------------------------------------------------5

第8个月:(id=1,age=8)  (id=2,age=4) (id=3,age=3) (id=4,age=2) (id=5,age=1) (id=6,age=0) (id=7,age=0)-----------------------------------------------------------7

第9个月:(id=1,age=9)  (id=2,age=5) (id=3,age=4) (id=4,age=3) (id=5,age=2) (id=6,age=1) (id=7,age=1)(id=8,age=0)(id=9,age=0)(id=10,age=0)--------10

第十个月:(id=1,age=10)  (id=2,age=6) (id=3,age=5) (id=4,age=4) (id=5,age=3) (id=6,age=2) (id=7,age=2)(id=8,age=1)(id=9,age=1)(id=10,age=1)(id=11,age=0)(id=12,age=0)(id=13,age=0)(id=14,age=0)---14

1:以数学的思想解决此问题

  通过以上数列,可以发现规律 a=an-1+an-4

  这时,可以用递归的思想来解决

//使用递归实现function get_rabbit_num($v){

if ($v==1){        return 1;    }    if ($v==2){        return 1;    }    if ($v==3){        return 1;    }    if ($v==4){        return 2;    }    else{        return get_rabbit_num($v-1)+get_rabbit_num($v-4);    }}

echo get_rabbit_num(14);

2、以编程的思想来解决此问题
class rabbit{    public $id;    public $age;    public $parent_id;

public function __construct($id,$age,$parent_id)    {        $this->id=$id;        $this->age=$age;        $this->parent_id=$parent_id;    }}//月龄加1function addAge(&$v){    $v->age+=1;}//判断是否能生孩子(第三个月的时候才怀上,第四个月才生出来)function isOk($v){   if ($v->age>3){       return true;   }else{       return false;   }}

$array_rabbit=[];//兔子的集合    $rabbit=new rabbit(‘1‘,0,0);//第一对兔子    array_push($array_rabbit,$rabbit);    for ( $i=0;$i<14;$i++){        array_filter($array_rabbit,"addAge");//每过一个月,先让每对兔子的月龄+1        $array_tmp=array_filter($array_rabbit,"isOk");//找出能生兔子的兔子        $ok_num=count($array_tmp); //能生兔子的兔子数        if (!$ok_num){ //如果都不能生,直接开始下一轮循环            continue;         } else{        $id_max=max(array_column($array_rabbit,"id"));//最大的id值            foreach ($array_tmp as $item) {                $id_max+=1;//新生出来的兔子的id                $rabbit_new=new rabbit($id_max,0,$item->id);//新建一个兔子对象(新生出来的兔子月龄都为0),并指向是哪对兔子生的                array_push($array_rabbit,$rabbit_new);//将新生出来的兔子加入集合            }     }    }

echo count($array_rabbit);


原文地址:https://www.cnblogs.com/aibaofeng/p/9815502.html

时间: 2024-09-27 22:40:14

(兔子繁殖问题)有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到三个月后每个月又生一对兔子,假如兔子都不死,问32个月过后的兔子总数为多少?的相关文章

古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(python语言)

# 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? # 斐波那契数列:0,1,1,2,3,5,8,13,21(后面一个数是前面两个数的和) # 第1个月 2(1) # 第2个月 2(2) # 第3个月 2(3)+ 2(1) # 第4个月 2(3)+ 2(2) + 2(1) # 第5个月 2(3)+ 2(3) + 2(2) + 2(1) + 2(1) # 第6个月 2(3)+ 2(3) + 2(3) +

Java版经典兔子繁殖迭代问题——斐波那契(Fibonacci)数列

/** * 题目: * 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子. * 假如兔子都不死,问经过month个月后,兔子的总数为多少对? */ public class Fibonacci { // 月份 static Integer month = 3; // 注意:month > 0 public static void main(String[] args) { Integer pair = f(month); System.out.printl

python3 兔子繁殖问题

题目 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 代码: month = int(input("繁殖几个月?:")) month_1 = 1 month_2 = 0 month_3 = 0 month_adult = 0 for i in range(month): month_1, month_2, month_3, month_adult = month_adult + month_3, mo

斐波那契数列——兔子繁殖问题

斐波那契数列又因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”. 斐波那契数列 一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来.如果所有兔都不死,那么一年以后可以繁殖多少对兔子? 我们不妨拿新出生的一对小兔子分析一下: 第一个月小兔子没有繁殖能力,所以还是一对; 两个月后,生下一对小兔民数共有两对; 三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对; --- 依次类推可以列出下表: 经过月数:0,1,2,3,4,5,6,7

1055: 兔子繁殖问题

题目描述 这是一个有趣的古典数学问题,著名意大利数学家Fibonacci曾提出一个问题:有一对小兔子,从出生后第3个月起每个月都生一对兔子.小兔子长到第3个月后每个月又生一对兔子.按此规律,假设没有兔子死亡,第一个月有一对刚出生的小兔子,问第n个月有多少对兔子? 输入 输入月数n(1<=n<=44). 输出 输出第n个月有多少对兔子. 样例输入 3 样例输出 2 #include<stdio.h>int n,tem;int pre=1;int cur=1;int main(){ s

一群伟大的科学家死后在天堂里玩藏猫猫,轮到爱因斯坦抓人,他数到100睁开眼睛,看到所有人都藏起来了,只见伏特趴在不远处。 爱因斯坦走过去说:“伏特,我抓住你了。” 伏特说:“不,你没有抓到我。” 爱因斯坦:“你不是伏特你是谁?” 伏特:“你看我身下是什么?” 爱因斯坦低头看到在伏特身下,居然是安培! 伏特:“我身下是安培,我俩就是伏特/安培,所以你抓住的不是我,你抓住的是....” …… 欧姆!

一群伟大的科学家死后在天堂里玩藏猫猫,轮到爱因斯坦抓人,他数到100睁开眼睛,看到所有人都藏起来了,只见伏特趴在不远处.爱因斯坦走过去说:"伏特,我抓住你了."伏特说:"不,你没有抓到我."爱因斯坦:"你不是伏特你是谁?"伏特:"你看我身下是什么?"爱因斯坦低头看到在伏特身下,居然是安培!伏特:"我身下是安培,我俩就是伏特/安培,所以你抓住的不是我,你抓住的是...."--欧姆! 爱因斯坦反应迅速,于是改口

古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四 个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

这是斐波那契数列,规律是:从第三个数开始,每个数都是前两个数的合. 是的,最简单的方法就是递归, package com.mh.basic.one; public class Recursion { public static int f(int i){ if( i == 1 || i == 2 ){ return 1; } else{ return f(i-1) + f(i-2); } } public static void main(String[] args) { System.out.

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

package a; public class Tuzi { public static void main(String[] args) { int a=1,b=0,c=0,sum = 0;//a 幼兔对数,b 小兔对数,c 成兔对数,sum 总对数 for (int i = 1; i <=24; i++) { if (i == 1) { a = 1; b = 0; c = 0; } else { c = b + c; b = a; a = c; } sum = a + b + c; Syst

js处理数学经典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子,假如兔子都不死,问每个月的兔子总数为多少?

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> var num1 = 1; var num2 = 0; var sum = 0; var mon = prompt("请输入你所