您的位置:首页 > 编程语言 > Java开发

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? Java实现

2015-03-05 11:15 274 查看
题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

我的思路:模拟兔子出生过程。想象有一个装兔子的容器,有一个按月划分的时间轴。第一个月,容器里只有一对兔子,兔子的出生月为1。然后每个月遍历一遍容器里的所有兔子,遍历的兔子数量为上一个月的兔子总量,如果当前月数-兔子的出生月数>=2,容器里就多一对兔子,并且把新增的兔子的出生月设置为当前月。需要知道哪一月的兔子数量,就把这个月设为当前月,获得当前月兔子数量即可。Java代码如下:

List<Integer> rabbitContainer = new ArrayList<Integer>();
rabbitContainer.add(new Integer(1));
for(int i = 1 ; i <= month; i ++){
for(int j = 0; j < rabbitContainer.size(); j++){
if((i - rabbitContainer.get(j)) >= 2){
rabbitContainer.add(new Integer(i));
}
}
}
return rabbitContainer.size();
}
网上经典解决方法:设当前第i个月,这个月的兔子总数,大致可以分为2部分,1部分是非新生的,另一部分是当月新生的。非新生的应该是第i-1个月的兔子总数,新生的取决于第i-2个月的兔子总数。即兔子[i]=兔子[i-1]+兔子[i-2]。于是,各个月的兔子数就形成了一个斐波那契数列:斐波那契数列指的是这样一个数列:1,
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...。Java代码 下:

public int getRabbitNum(int month) {
// TODO Auto-generated method stub
int rabbitNum = 1;
if(month > 0 && month < 3){
return rabbitNum;
} else {
return getRabbitNum(month - 1) + getRabbitNum(month - 2);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 算法
相关文章推荐