JAVA編程之古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子

   問題是這樣的:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一 對兔子, 假如兔子都不死,問每個月的兔子總數爲多少?

   這個問題相信大家已經不在陌生了。很多博客裏都有各種不同的解答方法。

   最多的方法就是先列出最初幾個月的兔子對數(注意是對數,不是個數)。如下所示:

1,1,2,3,5,8,13,21,34....

然後觀察數據的規律,從而得出這樣一個結論:從第三個月開始,兔子對數等於前面兩個月的兔子對數之和。看到這裏相信你已經有寫出代碼的思路了。這裏也不再詳細說明了。

   我要介紹的是,不知道這個規律的前提進行編程。

   思路是這樣的:

   ①、有一個籠子,我們逐一取出籠子中的一對兔子(當然這兩隻兔子的年齡是相同的)。

   ②、若它們的年齡大於或等於三個月,則生出一對小兔子。

   ③、將這兩對兔子放入籠中。

   ④、所有兔子的年齡加1(上面出生的兔子年齡不加)。

⑤、5查看此時籠子中的兔子數量。

   可能文字上理解起來會比較困難。相信你一看代碼就明白了。下面是整個代碼:

package com.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
 * 有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一 對兔子, 假如兔子都不死,問每個月的兔子總數爲多少?<br/>
 * @author Administrator
 */
public class Rabbit {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(new littleRabbit());
        for (int k = 1; k <= 20; k++) {
            for (int j = 0; j < list.size(); j++) {
                littleRabbit rabbit = (littleRabbit) list.get(j);
                int age = rabbit.getAge();
                if (age >= 3) {
                    list.add(new littleRabbit());
                }
                age++;
                rabbit.setAge(age);
            }
            System.out.println("第" + k + "個月有" + list.size() + "對兔子,一共"+list.size()*2+"只。");
//          System.out.print(list.size()+",");
        }
    }
}
class littleRabbit {
    private int age = 1;
    public void growUp() {
        this.age++;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

運行程序會得到下面的結果:

第1個月有1對兔子,一共2只。
第2個月有1對兔子,一共2只。
第3個月有2對兔子,一共4只。
第4個月有3對兔子,一共6只。
第5個月有5對兔子,一共10只。
第6個月有8對兔子,一共16只。
第7個月有13對兔子,一共26只。
第8個月有21對兔子,一共42只。
第9個月有34對兔子,一共68只。
第10個月有55對兔子,一共110只。
第11個月有89對兔子,一共178只。
第12個月有144對兔子,一共288只。
第13個月有233對兔子,一共466只。
第14個月有377對兔子,一共754只。
第15個月有610對兔子,一共1220只。
第16個月有987對兔子,一共1974只。
第17個月有1597對兔子,一共3194只。
第18個月有2584對兔子,一共5168只。
第19個月有4181對兔子,一共8362只。
第20個月有6765對兔子,一共13530只。


我們可以發現,這樣的繁殖速度實在是在驚人了。當繁殖月數爲36月時,程序將會因爲JVM內存不足而終止執行。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章