JAVA经典兔子问题
有一對兔子,從出生第三個月起每個月都生一對兔子,小兔子長到第三個月后,每個月又生一對兔子,假如兔子都不死,問M個月時兔子的數量。
很經典的斐波那契數列問題。 記得第一次看到這道題是在一次比賽中,當時并不知道斐波那契數列,但是列出來幾個月的兔子數后看到了這個規律,按照這個規律寫出來的代碼沒有通過測試。
斐波那契數列(Fibonacci sequence),又稱黃金分割數列,因數學家萊昂納多·斐波那契(Leonardo Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列: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*)在現代物理、準晶體結構、化學等領域,斐波納契數列都有直接的應用。
很長一段時間沒有看過這道題了,這次偶然做到這道題,我們試試不用遞歸不用斐波那契數列,從另一個角度來解決這個問題。
nq3為本月可以生兔子的,有老兔子和在本月才到3月的兔子,此兔子不會清零,只會一直增加。
nq2為本月到2月的兔子,由于有兔子去了3月,需清零,再加上剛到2月的兔子。
nq1為本月剛出生的兔子,同nq2,有兔子去了2月,清零,再加上nq3生的兔子。
由于兔子不會死亡,本月剛出生兔子 + 2月兔子 + 可以生兔子的兔子 = 本月兔子總數 (按對計算)
(PS:這么思考邏輯是對的,但是我有點不理解,小兔子長到第三個月后,按我的理解應該是,假如從四月出生的兔子,4 -> 5 -> 6 -> 7,(四月初1個月到五月初,五月初1個月到六月初,六月初1個月到七月初)應該是在七月初這個兔子才可以生新兔子。
這個題目里長到第三個月后,4 -> 5 -> 6 是這樣理解的嗎?如果我理解的有問題,敬請指正。)
public class Rabbit{public static void main(String[] args){//兔子問題for(int month = 1; month < 21; month++){int nq3 = 1;int nq2 = 0;int nq1 = 0;int sum = nq3 + nq2 + nq1;for(int i = 3; i <= month; i++){nq3 += nq2;nq2 = 0;nq2 += nq1;nq1 = 0;nq1 += nq3;sum = nq3 + nq2 + nq1;}System.out.println(month + "月:" + sum);}} }總結
以上是生活随笔為你收集整理的JAVA经典兔子问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Alienware-17-R4-630-
- 下一篇: 中国锂电设备行业营状况分析及未来发展动向