黑马程序员技术交流社区
标题:
每对兔子在出生后的第三年每年生一对,问:10年后兔子数量
[打印本页]
作者:
十万一千
时间:
2014-10-20 21:15
标题:
每对兔子在出生后的第三年每年生一对,问:10年后兔子数量
本帖最后由 十万一千 于 2014-10-21 14:57 编辑
package com.hp.test;
import java.util.ArrayList;
import java.util.List;
public class 兔子总数 {
// 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
// 小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
public static void main(String[] args) {
Integer afterMonth = 10;
List<Rabbit2> rabbit2s = new ArrayList<Rabbit2>();
// 兔子族群的老祖宗(rabbit2Ancestors)
Rabbit2 rabbit2Ancestors = new Rabbit2(rabbit2s);
rabbit2s.add(rabbit2Ancestors);
while (afterMonth > 0) {
afterMonth--;
for (int i = 0; i < rabbit2s.size(); i++) {
rabbit2s.get(i).growUp();
}
}
System.out.println(rabbit2Ancestors.getAge() + "年后,总共会有兔子" + rabbit2s.size() * 2 + "只。");
}
}
class Rabbit2 {
public Rabbit2(List<Rabbit2> rabbit2s) {
this.rabbit2s = rabbit2s;
}
private List<Rabbit2> rabbit2s;
private Integer age = 0;
private boolean isSexualMaturity;
/* 兔子们都长大一岁了 */
public void growUp() {
this.age++;
this.setSexualMaturity();
if (this.isSexualMaturity) {
this.rabbit2s.add(new Rabbit2(this.rabbit2s));
}
}
public List<Rabbit2> getRabbit2s() {
return rabbit2s;
}
public Integer getAge() {
return age;
}
public boolean isSexualMaturity() {
return isSexualMaturity;
}
private void setSexualMaturity() {
if (this.age >= 3) {
this.isSexualMaturity = true;
} else {
this.isSexualMaturity = false;
}
}
}
复制代码
各位斑斑们有做过这个题目没, 想了半天 做出来了 一个版本,请高人指教。。。
PS:
若每对兔子每年 有1/10的概率同时死亡, 有1/4的概率不生育后代,请模拟每年兔子的数量。(每年新生,死亡,幸存的,没生育的分别)
作者:
无尽落寞
时间:
2014-10-20 21:55
看起来很复杂,不就是斐波拉契数列吗?
作者:
十万一千
时间:
2014-10-20 21:59
无尽落寞 发表于 2014-10-20 21:55
看起来很复杂,不就是斐波拉契数列吗?
什么是 斐波拉契数列 啊, 不太懂啊
作者:
十万一千
时间:
2014-10-21 13:08
其实 private boolean isSexualMaturity;成员可以省略,growUp方法可以换成
public void growUp() {
this.age++;
if ( this.age>=3) {
this.rabbit2s.add(new Rabbit2(this.rabbit2s));
}
}
复制代码
作者:
肖建伟
时间:
2014-10-21 13:57
哥们,很简单的菲波拉契数列问题,递归。
代码也很简单。
package com.itheima.bbs;
public class RabNum {
public static void main(String[] args) {
System.out.println("第1个月的兔子对数: 1");
System.out.println("第2个月的兔子对数: 1");
int f1 = 1, f2 = 1, mon = 10, f;
for (int i = 3; i <= mon; i++) {
f = f2;
f2 = f1 + f2;
f1 = f;
}
System.out.println("第" + mon + "个月的兔子对数:" + f2);
}
}
作者:
十万一千
时间:
2014-10-21 14:46
肖建伟 发表于 2014-10-21 13:57
哥们,很简单的菲波拉契数列问题,递归。
代码也很简单。
如果我把题目稍微改动下。。。恩 比如 每对兔子每年 有1/10的概率同时死亡, 有1/4的概率不生育后代,请模拟每年兔子的数量
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2