经典的兔子问题

来源:互联网 发布:网站制作软件 编辑:程序博客网 时间:2024/04/27 22:43


这道题是:有一对兔子,长到第三个月开始,每个月生一对小兔子,等到小兔子长到第三个月时,又开始每个月生一对小兔子,假设兔子一直不死,那么每个月兔子的数量是多少?

刚拿到题,感觉很简单。可是仔细一想,就发现,还是很麻烦的。因为小兔子到第三个月才会再生小兔子,而小兔子生小小兔子的时候,老兔子也会再生小兔子,那么他的增量不是固定的,而是呈一种非连续递增状态,每两个月变一次,想用一个式子表示出来是有相当难度的。好了,够扯淡得了。

下面看我的解决方法,既然每个月兔子的年龄不是相同的,有一个月大的(用mon1表示数量),两个月大的(mon2),和三个月及三个月以上的(mon3),那么就可以把每个月的兔子分为这三类,然后计算每类兔子的数量,最后相加就是它的总量。

各类兔子的关系是这样的,先从mon3的看,mon3(本月)=mon2(上个月)+mon3(上个月),接着,mon2(本月)=mon1(上个月),然后,mon1=mon3(上个月)。

解释一下,本月三个月大的兔子数就是上个月三个月和两个月大的兔子数之和,因为小兔子长大了;同理本月两个月大的是上月一个月大的长大的,而本月一个月大的是本月三个月大的兔子新生的。最后这几类数量相加就是每个月的总数。

问题到此结束。

附:我的代码如下:

<span style="font-size:18px;">int robert(int n){int inum=0,j=0;int mon1=0,mon2=0,mon3=1;if(n<3)inum=1;//总数if(n>=3){for(j=3;j<=n;++j){mon3=mon3+mon2;mon2=mon1;mon1=mon3;}inum=mon3+mon2+mon1;}return inum;}</span>
这个结果和菲波那楔数的结果是相同的。



0 0