关于兔子问题(斐波那契数)的Java实现--采用面向对象的方式

    最近接触到一个有趣的兔子问题(斐波那契数),在网上看了看基本都是一些C语言的解决方案,涉及到一些高深的算法,所以就想用面向对象的思想来解决一下这个问题.

先附上问题:有人想知道一年内一对兔子可繁殖成多少对,便筑了一道围墙把一对兔子关在里面。已知一对兔子每一个月可以生一对小兔子,而一对兔子出生后.第三个月开始生小兔子假如一年内没有发生死亡,则一对兔子一年内能繁殖成多少对?(来自百度百科)

分析这个问题,首先抽象出兔子模型(以一对作为单位)

package yao.com.rabit;
public class ParRabbit {
public int month=1;// 出生后的第几月
public ParRabbit getRabbit() //生育小兔子的功能
{
return new ParRabbit();
}
public void growup() //长大的功能(按月计算)
{
this.month++;
}
}

分析和建立好兔子模型后,完成功能


package yao.com.rabbit;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<ParRabbit> list =new ArrayList<ParRabbit>();//定义一个养殖场用于存放所有的兔子
ParRabbit rabit =new ParRabbit(); //买回第一对兔子
list.add(rabbit); // 放入养殖场精心饲养
for(int i=0;i<12;i++) //在一年内(12个月)
{
List<ParRabbit> list0 =new ArrayList<ParRabbit>(); //每个月开始准备一个新的待产房
for(ParRabbit pr:list) //查看养殖场内所有待产的兔子,
{
if(pr.month>=3) //出生后三个月为预产期
{
list0.add(pr.getRabbit()); //到达预产期的兔子在产房出生
}
}
      list.addAll(list0); //新生的兔子开始进入养殖场
          for(ParRabbit pr:list)//每对兔子都在长大一个月
             {
          pr.growup(); 
         
System.out.println("第"+(i+1)+"月的兔子数------>"+list.size());  //月底清点兔子总数
}
}
}


第1月的兔子数------>1
第2月的兔子数------>1
第3月的兔子数------>2
第4月的兔子数------>3
第5月的兔子数------>5
第6月的兔子数------>8
第7月的兔子数------>13
第8月的兔子数------>21
第9月的兔子数------>34
第10月的兔子数------>55
第11月的兔子数------>89
第12月的兔子数------>144

总结:虽然代码感觉多了,但是整个实现过程并没有太过于复杂的算法实现,基本都是根据现实中的情景构建!这里之所以要将出生的兔子转移到产房是因为

直接存放在list中是不允许的,(站在桥上拆桥的情况),及在遍历list的时候又往里面添加元素是不行的!!!

-------------java菜鸟,诸多不足,还望同行多多指正,和交流!!!






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值