1. 程式人生 > >統計每個月兔子總數

統計每個月兔子總數

數列 star 輸入 ble wid urn bject mon 規律

題目描述

有一只兔子,從出生後第3個月起每個月都生一只兔子,小兔子長到第三個月後每個月又生一只兔子,假如兔子都不死,問每個月的兔子總數為多少?

輸入:

9

輸出:

34

分析

1月大 2月大 3月大
一月 1 0 0
二月 0 1 0
三月 1 0 1
四月 1 1 1
五月 2 1 2
六月 3 2 3
七月 5 3 5
八月 8 5 8
九月 13 8 13
十月 21 13 21
十一月 34 21 34
十二月 55 34 55

規律: 簡單遞推

f(月份,1月大) = f(月份,3月大) = f(月份-1,2月大) + f(月份-1,3月大)

f(月份,2月大) = f(月份-1, 1月大)

<?
//遞推使用
function getNum( $month )
{
    $oneCount = 1;
    $twoCount = 0;
    $threeCount = 0;

    $start = 1;
    while ($start < $month)
    {
        $tmp = $oneCount;
        $oneCount = $twoCount + $threeCount;
        $twoCount = $tmp;
        $threeCount = $oneCount;
        $start++;
    }
    return $oneCount+$twoCount+$threeCount;
}

function main()
{
    while ($month = fgets(STDIN))
    {

        $num = getNum(intval($month));
        print $num."\n";
    }
}

main();

  

優化:如果以每個月兔子數量為基礎,可以發現兔子總數符合斐波拉契數列的規律

統計每個月兔子總數