兔子產子與fibanacii序列

2021-06-19 13:20:16 字數 1102 閱讀 1880

獲取第nvalue1個月出生多少對兔子

這裡最好把兔子理解為中子,兩個中子對撞可以產生新的兩個中子,即沒有雌雄之分

第乙個月 只有一對中子,

第二個月 一對中子對撞出新的一對中子,因此2th月出生的中子對數為1.

第三個月 還是第乙個月的中子對撞出新的一對中子

第四個月 第乙個月和第二個月的中子都能對撞出新的中子對,因此本月的新生中子對數為2對

設第n個月的新生中子對數為bn,則bn=【本月的老中子對數】

unsigned int getbirthrabbitnum(unsigned int  nvalue1)

return ai;

}a表示 n月的兔子

b表示n+1月的兔子

b - a表示 n+1月出生的兔子,在n+2月,這群兔崽子是沒成熟的。

n+2月的兔子 = b(n+1月的兔子) + a(n月兔子生下的幼兔)

推算公式如下:

a【n+2】 = a【n+1】 + a【n】

0、公母都能生

1、上個月生的兔崽子還沒長大這個月不能生

2、上個月生兔崽子的爹媽這個月都可以接著生,這個要算進來

3、上上個月生的兔崽子都長大了這個月可以生,這個要算進來

4、上上個月生兔崽子的爹媽已經包含在第2點上個月生兔崽子的爹媽裡了,這個不算進來

5、再往前的月份生的兔崽子和爹媽都已經包含在2、3裡了

這個月生的兔崽子數=上個月生兔崽子的爹媽數+上上個月生的兔崽子數

而上個月生兔崽子的爹媽數=上個月生的兔崽子數

所以,這個月生的兔崽子數=上個月生的兔崽子數+上上個月生的兔崽子數

其實這個就是斐波納契數列(fibonacci sequence),又稱**分割數列。

雖然這是乙個完全是自然數的數列,但是通項公式卻是用無理數來表達的,所以這道題不能用通項公式計算的方法來解。

用遞推最好,用遞迴也可以。

關於遞迴,這個數列的增長速度還是很快的,unsigned int的情況可以承受,如果是超大整數(比如用陣列、鍊錶之類表示的)就要用遞推了。

百練 3258 兔子產子

描述 從前有一對長壽兔子,它們每乙個月生一對兔子,新生的小兔子兩個月就長大了,在第二個月的月底開始生它們的下一代小兔子,這樣一代一代生下去,求解兔子增長數量的數列。輸入第1行是測試資料的組數n,後面跟著n行輸入。每組測試資料佔1行,包括乙個正整數a 1 a 20 輸出輸出有1行,每行輸出對應乙個輸入...

POJ 3258 兔子產子

時間限制 1000ms 記憶體限制 65536kb 描述從前有一對長壽兔子,它們每乙個月生一對兔子,新生的小兔子兩個月就長大了,在第二個月的月底開始生它們的下一代小兔子,這樣一代一代生下去,求解兔子增長數量的數列。輸入第1行是測試資料的組數n,後面跟著n行輸入。每組測試資料佔1行,包括乙個正整數a ...

python演算法練習之兔子產子(斐波那切數列)

目錄 有一對兔子,從出生後的第3個月起每個月都生一對兔子。小兔子長到第3個月後每個月又生一對兔子,假設所有的兔子都不死,問30個月內每個月的兔子總對數為多少?兔子產子問題是乙個有趣的古典數學問題,我們畫一張表來找下兔子數的規律,如下表所示 程式設計客棧 月數小兔子對數 中兔子對數 老兔子對數 兔子總...