通过Java编写兔子不死的情况下每一对兔子每月产一对兔子,问每月的兔子总数(即:斐波拉契数列)

古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总对数为多少?
  • 下边的分析是通过Excel表格做出来的,因为不知道它具体生产的情况,所以就一个月一个月的试,最后得到下列的情况
	/**
	  * 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
	  * 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,
	  * 问每个月的兔子总对数为多少?
	  * 第一月	:(1)1
	  * 第二月	:(1)1
	  * 第三月	:(2)1+1
	  * 第四月	:(3)1+1+1
	  * 第五月	:(5)1+1+1+1+1
	  * 第六月	:(8)1+1+1+1+1+1+1+1
	  * 第七月	:(13)1+1+1+1+1+1+1+1+1+1+1+1+1
	  * 第八月	:(21)1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
	  * 第九月	:(34)1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
	  * 第十月	:(55)1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
	  *	第十一月:(89)1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
	  *	第十二月:(144)1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
	  *
	  *	根据上边的分析,很明显,
	  *	当前月的兔子总对数=前两个月兔子对数和
	  *
	  *	第三月:1+1=2
	  *	第四月:1+2=3
	  *	第五月:2+3=5
	  *	第六月:3+5=8
	  *	第七月:5+8=13
	  *	第八月:8+13=21
	  *	第九月:13+21=34
	  *	第十月:21+34=55
	  */
	 public static void rabbit(){
		 int month = 0;
		 Scanner in = null;
		 try{
			 month = getMonth(in,month,"请输入你饲养兔子的月份:");
			 if(month<1){
				 month = getMonth(in,month,"月份不能小于1个月,请重新输入饲养兔子的月份:");
			 }
		 }catch(Exception e){
			 month = getMonth(in,month,"你输入的月份不合法,请重新输入饲养兔子的月份:");
		 }
		 long [] rb= new long[month];
		 for(int i=0;i<month;i++){
			 if(i<2){
				 //	给第一月,第二月赋默认值为1,因为前两个月没有兔子出生
				 rb[i]=1;
			 }else{
				 //	从第三月开始,每月的兔子总对数=前两个月兔子对数的和
				 rb[i]=rb[i-2]+rb[i-1];
			 }
			 System.out.print("第"+(i+1)+"月的兔子总对数:"+rb[i]);
		 }
	 }
	 /**
	  * 获取输入的月份
	  * @param in
	  * @param month
	  * @return
	  */
	 @SuppressWarnings("resource")
	 public static int getMonth(Scanner in,int month,Object o){
		 in= new Scanner(System.in);
		 System.out.print(o);
		 return in.nextInt();
	  }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值