Java之不死神兔

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

问题分析:

题目乍一看并不知道在说什么,不要紧,我们来找规律。

第几个月 兔子对数 为什么
1 1 原来有一对兔子,编号a
2 1 原来有一对兔子,编号a
3 2 第3个月生了一对小兔子,编号b
4 3 原来老兔子a继续生小兔子,编号c
5 5 编号b的兔子成熟,和老兔子一起生小兔子,编号d、e
6 8 a、b、c一起生兔子,编号f、g、h
7 13 a、b、c、d、e一起生兔子,编号i、j、k、l、m
... ... ...

从表中可以看出,从第三个月开始,当前月兔子对数是前两个月兔子对数的和,所以求当前月兔子对数的核心代码是arr[i] = arr[i - 2] + arr[i - 1];
该题目原型就是著名的斐波那契数列,下面贴出代码并科普斐波那契数列。

完整代码如下 :
public static void main(String[] args) {
    int[] arr = new int[20];
    arr[0] = 1; // 第一个月兔子的数量,1对
    arr[1] = 1; // 第二个月兔子的数量,1对
    int sum = 2; // 用于记录兔子总数量,现在初始化为前两个月兔子的总数,2对
    for (int i = 2; i < arr.length; i++) {
        arr[i] = arr[i - 2] + arr[i - 1];
        System.out.println("第" + (i + 1) + "个月兔子对数为:" + arr[i]);
        sum += arr[i];
    }
    System.out.println("兔子总对数:" + sum);
}
斐波那契数列小科普

“斐波那契数列”和分数的发明者,是意大利数学家列昂纳多·斐波那契。1202年,他撰写了《珠算原理》(Liber Abaci)一书。他是第一个研究了印度和阿拉伯数学理论的欧洲人。他的父亲被比萨的一家商业团体聘任为外交领事,派驻地点相当于今日的阿尔及利亚地区,列昂纳多因此得以在一个阿拉伯老师的指导下研究数学。

Java之不死神兔_第1张图片
列昂纳多·斐波那契.jpg

斐波那契数列(Fibonacci sequence):又称黄金分割数列,因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)

PS:如有不足或错误,请多多包含并指正。

你可能感兴趣的:(Java之不死神兔)