码迷,mamicode.com
首页 > 其他好文 > 详细

统计每个月兔子总数

时间:2018-11-01 22:25:47      阅读:430      评论:0      收藏:0      [点我收藏+]

标签:idt   des   题目   intval   \n   one   border   std   item   

题目描述

有一只兔子,从出生后第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();

  

优化:如果以每个月兔子数量为基础,可以发现兔子总数符合斐波拉契数列的规律  

 

 

 

 

统计每个月兔子总数

标签:idt   des   题目   intval   \n   one   border   std   item   

原文地址:https://www.cnblogs.com/cing123/p/9892516.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!