这道题是:有一对兔子,长到第三个月开始,每个月生一对小兔子,等到小兔子长到第三个月时,又开始每个月生一对小兔子,假设兔子一直不死,那么每个月兔子的数量是多少?
刚拿到题,感觉很简单。可是仔细一想,就发现,还是很麻烦的。因为小兔子到第三个月才会再生小兔子,而小兔子生小小兔子的时候,老兔子也会再生小兔子,那么他的增量不是固定的,而是呈一种非连续递增状态,每两个月变一次,想用一个式子表示出来是有相当难度的。好了,够扯淡得了。
下面看我的解决方法,既然每个月兔子的年龄不是相同的,有一个月大的(用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>
这个结果和菲波那楔数的结果是相同的。