統計每個月兔子總數
阿新 • • 發佈:2018-11-01
數列 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();
優化:如果以每個月兔子數量為基礎,可以發現兔子總數符合斐波拉契數列的規律
統計每個月兔子總數