兔子繁殖问题
Primary Practice h53
1 对兔子出生以后经过 180 天可以生出一窝(2 对)兔子,以后每隔 90 天繁殖一次生出一窝(2 对)兔子
每对兔子的寿命是 700 天
@param startCount 第 0 天 开始的时候初始的兔子对数
@param days 经过的天数
@return 目前系统中存活的兔子的对数
一道很有趣的题,不是简单的递归问题。无需找规律,只需模拟出真实的兔子繁殖。
可以发现,需要抽象出兔子类(个体)、兔子窝类(集体),才能完整模拟兔子繁殖。
0x00 Rabbit
根据要求,兔子的属性有它的“年龄”(以天计)、“寿命”(以天计,700 天)、生存状况(生存天数达到寿命则死亡):
1 | private int dayAge; |
兔子刚出生时,“年龄”为 0:
1 | public Rabbit() { |
获取兔子的“年龄”:
1 | public int getDayAge() { |
兔子经过一天的成长(只有此时会发生兔子死亡,所以需要判断):
1 | public void growOneDay() { |
获取兔子的生存状况:
1 | public boolean isDead() { |
0x01 RabbitNest
上面的 Rabbit 类代表兔子个体,此 RabbitNest 类代表兔子集体:
1 | private final List<Rabbit> rabbits = new ArrayList<>(); |
兔子窝开始的时候,需要几只初始兔子:
1 | public RabbitNest(int startCount) { |
经过一天,兔子们长大了:
1 | public void rabbitsGrow() { |
经过一天,有的兔子达到的寿命,离开了:
1 | public void rabbitsDead() { |
经过一天,有的兔子生小兔子了:
1 | public void rabbitsBearLittleRabbits() { |
经过一天,兔子们主要经历以上三个阶段:成长、死亡、新生:
1 | public void oneDayPass() { |
获取兔子窝中兔子数量:
1 | public int getLivingRabbits() { |
0x02 RabbitCount
创建了兔子和兔子窝,想要知道兔子的数量也就简单了:只需创建一个兔子窝,经历相应的天数,再获取其中兔子的数量:
1 | public int getLivingRabbit(int startCount,int days) { |