斐波那契生兔子問題(一月大兔子生a對,二月大兔子生b對,三月大兔子生c對。。。)
現提出一個問題:一對兔子一個月大時可生育a對兔子,兩個月大的兔子生育b對兔子,三個月大及以後的兔子生c對兔子。假設兔子不死,現有1對兔子,問N個月後有多少隻兔子。
看起來這是一個遞推數列的問題,要注意的地方在於,第n+1個月和第n個月的關係是,f(n+1)=第n個月的一月生兔子*a+第n個月的二月生兔子*b+第n個月的三月生及以後兔子*c。試圖直接找遞推關係將是很困難的。不妨用迴圈或者遞迴用狀態轉移的思想,從第一個月順著推到n個月。
兔子群裡隨時都是三種兔子,一月生二月生和三月生,所以我們要做的就是從頭開始,每進行一個月算出下一個月的三種兔子分別是多少,然後讓月份+1,當月份達到要求時推出即可。
現令N=11,a=0,b=1,c=1(在這種情況下恰好構成斐波那契數列)
遞迴版:
#include <iostream> #include <cstdio> using namespace std; int total = 0,N=11; int a=0,b=1,c=1; void tuzi(int month,int first,int second,int third) { if(month>N) { total = first + second + third; return ; } int f=first,s=second,t=third; f = first * a + second * b + third * c; s = first; t += second; tuzi(month+1,f,s,t); } int main() { tuzi(1,1,0,0); cout<<total<<endl; }
非遞迴版:
#include <iostream>
#include <cstdio>
using namespace std;
int a=0,b=1,c=1;
int main()
{
int n=0;
int f,first=1,s,second=0,t,third=0;
while(n<11)
{
f=first;
s=second;
t=third;
first = f*a+s*b+t*c;
second = f;
third += s;
n++;
}
cout<<first+second+third<<endl;
}
當我們計算前11個月每月總數時,我們發現
結果剛好是我們熟悉的斐波那契數列f(n)=f(n-1)+f(n-2)。
剛開始看到這道程式設計題的時候我也想過會不會第n個月和前面的有某種遞推關係,但是沒多想直接用DP的思想做了,做完了再會過來看才發現剛好是斐波那契數列。現在我們來看看為什麼是這樣。
我們用f(n),s(n),t(n),g(n)分別代表第n個月時的一月生,二月生,三月(fst是first,second,third的意思)及以後的兔子數量,和g(n)總數。
即有g(n)=f(n)+s(n)+t(n)。
在上圖結果中,我們隨便找三行,可以發現以下關係:
t(n)=s(n-1)+t(n-1),s(n)=f(n-1),f(n)=s(n-1)+t(n-1)。
然後再看s(n-1)和t(n-1): s(n-1)=f(n-2),t(n-1)=s(n-2)+t(n-2)。
帶入上面f(n)中可得 f(n)=f(n-2)+s(n-2)+t(n-2)。
最終可得 g(n)=s(n-1)+t(n-1)+f(n-1)+f(n-2)+s(n-2)+t(n-2),即g(n)=g(n-1)+g(n-2)
相關文章
- 【JAVA習題一】古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一 對兔子,假如兔子都不死,問每個月的兔子總數為多少?Java
- 斐波那契數列的來源——數兔子
- 兔子和兔子
- 《瘋狂兔子:奇遇派對》:在聚會中,一群來自法國的兔子穿越到了唐朝
- 2020秋資料結構實驗第一題:兔子數列模擬(斐波那契數列模擬)C++實現資料結構C++
- JAVA程式設計題-用java解決兔子問題Java程式設計
- 大學生對開源的反思
- 兔子提醒千萬不要把SEO做成SEC
- 手搓一個兔子問題(分享一個C語言問題,持續更新…)C語言
- [HEOI 2015] 兔子與櫻花(貪心) | 錯題本
- P4688 Ynoi2016 掉進兔子洞
- 【入門】統計每個月兔子的總數 - 題解
- 大數斐波那契數列的演算法演算法
- [教程文件]兔子tuzicms修改後臺管理路徑地址的方法
- 《暗影火炬城》評測:鐵拳兔子的強力一擊
- Android逆向之旅--瘋狂兔子無敵跑跑 內購破解教程Android
- 大學生對進入IT行業的熱度依然不減?行業
- 當代大學生對學習Linux的一點拙見Linux
- 斐波那契問題和擴充套件套件
- 開啟斐波那契數列的新研究大門
- 解決IP限制使用代理兔子軟體換IP一鍵完成!
- 妙聚網路陳博:狂奔在遊戲行業的兔子遊戲行業
- 斐波那契數列 (C#)C#
- 斐波那契數
- 兔子直播卷軸系統技術開發詳情(成熟技術)
- 兔子短影片直播(卷軸)系統技術開發(原始碼搭建)原始碼
- 如何偽裝自己的IP地址?兔子軟體IP代理輕鬆搞定
- [C103] 斐波那契數列
- 關於大數斐波拉契加法
- 對數字孿生的思考
- 兔子動態代理ip伺服器要遵循幾個關鍵步驟伺服器
- 斐波那契數列
- 第十題:斐波那契數列
- 能對當今公司IT市場產生重大影響的6大趨勢
- PAT-B 1038 統計同成績學生【對映】
- Go 對 Python 產生的衝擊GoPython
- 鴻翼雲生態大會之生態解決方案
- 長安對決|2021年陝西省大學生網路安全技能大賽報名開啟