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

JAVA编程之古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子

2013-11-21 21:46 274 查看
问题是这样的:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子, 假如兔子都不死,问每个月的兔子总数为多少?
这个问题相信大家已经不在陌生了。很多博客里都有各种不同的解答方法。
最多的方法就是先列出最初几个月的兔子对数(注意是对数,不是个数)。如下所示:
1,1,2,3,5,8,13,21,34....
然后观察数据的规律,从而得出这样一个结论:从第三个月开始,兔子对数等于前面两个月的兔子对数之和。看到这里相信你已经有写出代码的思路了。这里也不再详细说明了。
我要介绍的是,不知道这个规律的前提进行编程。

思路是这样的:

①、有一个笼子,我们逐一取出笼子中的一对兔子(当然这两只兔子的年龄是相同的)。
②、若它们的年龄大于或等于三个月,则生出一对小兔子。
③、将这两对兔子放入笼中。

④、所有兔子的年龄加1(上面出生的兔子年龄不加)。

⑤、5查看此时笼子中的兔子数量。
可能文字上理解起来会比较困难。相信你一看代码就明白了。下面是整个代码:

package com.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子, 假如兔子都不死,问每个月的兔子总数为多少?<br/>
* @author Administrator
*/
public class Rabbit {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new littleRabbit());
for (int k = 1; k <= 20; k++) {
for (int j = 0; j < list.size(); j++) {
littleRabbit rabbit = (littleRabbit) list.get(j);
int age = rabbit.getAge();
if (age >= 3) {
list.add(new littleRabbit());
}
age++;
rabbit.setAge(age);
}
System.out.println("第" + k + "个月有" + list.size() + "对兔子,一共"+list.size()*2+"只。");
//          System.out.print(list.size()+",");
}
}
}
class littleRabbit {
private int age = 1;
public void growUp() {
this.age++;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
运行程序会得到下面的结果:
第1个月有1对兔子,一共2只。
第2个月有1对兔子,一共2只。
第3个月有2对兔子,一共4只。
第4个月有3对兔子,一共6只。
第5个月有5对兔子,一共10只。
第6个月有8对兔子,一共16只。
第7个月有13对兔子,一共26只。
第8个月有21对兔子,一共42只。
第9个月有34对兔子,一共68只。
第10个月有55对兔子,一共110只。
第11个月有89对兔子,一共178只。
第12个月有144对兔子,一共288只。
第13个月有233对兔子,一共466只。
第14个月有377对兔子,一共754只。
第15个月有610对兔子,一共1220只。
第16个月有987对兔子,一共1974只。
第17个月有1597对兔子,一共3194只。
第18个月有2584对兔子,一共5168只。
第19个月有4181对兔子,一共8362只。
第20个月有6765对兔子,一共13530只。


我们可以发现,这样的繁殖速度实在是在惊人了。当繁殖月数为36月时,程序将会因为JVM内存不足而终止执行。

本文出自 “一个风向” 博客,请务必保留此出处http://lanffy.blog.51cto.com/6452125/1329776
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐