菲波拉契数列问题

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

解题思路:利用面向对象的思想

兔子:只有一个字段,就是月数,有一个函数就是成长,当大于三个月之后就产仔。

队列:兔子队列。

好吧,有了兔子队列,就遍历每一个图列中的兔子吧,能长的就长,能产仔的就产仔。

代码

兔子

package Rubbot;

import java.util.List;

public class Rubbot {
	int eag=0;//月数
	public  void grow(List<Rubbot> allrobbout)
	{
		eag++;//月数累加
		if(eag>=3)//月数>3,每个月产一次仔
		{
			allrobbout.add(new Rubbot());	//产仔很简单,往兔子队列中添加一个新兔子就行了
		}
	}

}

测试函数

package Rubbot;

import java.util.ArrayList;
import java.util.List;

public class TestRobbot {
	public static void main(String[] args) {
		Rubbot r=new Rubbot();//第一只兔子
		List<Rubbot> allrobbot=new ArrayList<Rubbot>();//兔子队列
		allrobbot.add(r);
		for(int i=1;i<=12;i++)//一年12个月
		{
			for(int j=0;j<allrobbot.size();j++)//看看兔子吧,不用for-each是因为它会抛出一个异常
			{
				Rubbot robbot=allrobbot.get(j);
				robbot.grow(allrobbot);
			}
			System.out.println("第"+i+"月 "+allrobbot.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只



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值