首先分析問題:面對這樣的繁殖問題,可以考慮遞推;個人第一次面對這種問題時的思路過程:
1.明確我的目標我要求第n年,那麼如果我要求第100年怎麼辦?
我發現,我很難算出第100年的情況。
2. 那我退而求其次,在紙上列出**,看能不能找出什麼規律。
第零年第一年
第二年第三年
第四年第五年
第六年123
46913
找規律,假如能找出乙個數學公式的話,問題就容易解決了。
分析**:前四年都是開始的母牛生下的孩子。從第四年開始,第一年出生的牛也開始生下孩子。寫出分解運算,聯想之前接觸過的一些陣列。第四年的6會不會是第三年加上第二年呢?4+3為7,顯然不合理。再分析,6=4+2。
這個時候,結合實際問題。牛可以分解為:已經存在的牛+這一年生育的牛。
那麼已經存在的牛是第三年有的牛。問題解決了一半。
3. 這個時候需要分析,這一年生育的牛。根據一般規律。6=4+2;9=6+3;13=9+4;再結合題目中,牛在第三年成熟,不難發現,這一年生育的牛是三年前成熟的牛。
4. 我們得到了數列的單項公式。an=a(n-1)+a(n-3)
5. 接下來進行**實現。大致如下:
/*有一頭母牛,它每年年初生一頭小母牛。每頭小母牛從第四個年頭開始,
每年年初也生一頭小母牛。程式設計實現在第n年的時候,共有多少頭母牛?
分析:類似於兔子生兔子的問題
牛的總數等於,前一年的牛+出生的牛(n-3);
遞迴過程中,子問題,n-1年的牛也為:前一年的牛+出生的牛(n-3)
n-3年的牛也為:前一年的牛+出生的牛(n-3)
遞迴結束條件:n=4時,第一次有出生的牛成熟。因該為n等於1,2,3時的值
*/#include
using
namespace std;
intf
(int n)
//生的牛的總數是,三年前的牛的數目。 因為牛第四年才能生育
intmain()
總結一下這種題目的思路:
這種題目做多以後,再做,不由自主的會想起遞迴。
想到遞迴,就要分解出來第n年的數目(這裡不妨假設n超過遞迴的結束條件),可以想乙個具體的數字。
寫f(n)=f();的公式。這一類問題,n年的數目,分兩類,乙個是n-1年的牛的數目,這個數目是已經存在的牛。還有f(n-3)的牛,這個數目是生育出來的牛(牛一年只能生育乙隻小牛,所以數目與f(n-3)相同。 ps:大家可以試一下如果一頭牛可以生兩隻,或者更多的情況。或者每一年會死某個數目的牛)。
由此可得遞迴公式f(n)=f(n-1)+f(n-3)。
接下來就是**的實現。
下面放上**的。
之後會詳細記錄學習c++、資料結構、演算法設計與分析過程中刷到的題目和感悟。僅供自己學習使用,如果恰好這篇文章能幫到你,不甚榮幸,需要**的自行拿走,寫錯的請多多包容,共同學習,共同進步。
兔子生兔子問題
問題描述 兔子生兔子問題 有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對 兔子,假如兔子都不死,問每個月的兔子總數為多少?假設我們要求列印出第乙個月到第二十個月的兔子總數 可以得出規律 第乙個月的兔子總數是1,第二個月的兔子總數是1,從第三個月開始,兔子總數是前...
兔子生兔子問題
問題描述 有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少 分析 這道題我們可以把兔子分為三個階段,幼崽 成年,生育 實際月份 幼崽數量 成兔數量 兔子總數11 0120 1131 1241 2352 3563 587...
生兔子問題
很有意思的面試題大家快來看看 一對小兔子一年後長成大兔子 一對大兔子每半年生一對小兔子。大兔子的繁殖期為4年,兔子的壽命是6年。假定第一年年初投放了一對小兔子,試程式設計計算,第n年末總共會有多少對兔子。n由鍵盤輸入 請針對物件導向程式設計 兔子類using system using system....