关于不死兔子的编程题**

关于不死兔子的编程题**

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用

题目是这样说:

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

首先分析题目,题中说的都是兔子的对数,一对兔子也是只生一对兔子,所以下面关于兔子数说的全是兔子对数

第一个月1对兔子,第3个月起每个月都生一对兔子,新生的兔子又在之后的第三个月开始生兔子,
也就是3月生的兔子5月开始生兔子,4月生的兔子6月开始生兔子,6月生的兔子7月开始生兔子…

可以生的兔子数:第一对兔子,第三个月才可以生兔子,这样前2个月是没有可以生的兔子的 ,第三个月可以生的
兔子变为1,新生的兔子又是两个月后(第三个月)开始生,如此

每月可生的兔子个数就是: 上个月可生的兔子 + 本月新增的可生兔子,因为新生的兔子是第三个月开始可以生
兔子,比如3月新生的兔子5个可以生兔子,4月新生的兔子是6月开始生兔子,5月新生的兔子是8月开始生兔子…
所以每个月新增的可生兔子数 就是 两个月前的新生兔子数,这样

	每月可生的兔子 =  上个月可生的兔子  +   本月新增的可生兔子,

就是
每月可生的兔子 = 上个月可生的兔子 + 两个月前的新生兔子数

因为兔子都是生一对兔子,所以 每个月新生的兔子数就是 :本月可生的兔子

因为兔子都不死,兔子总对数就是: 上个月的兔子总数 + 本月新生兔子

列表看一下
在这里插入图片描述
发现从第三个月开始:
实际每个月可生的兔子数就是,上上个月(两个月前)的兔子总数,这也正是符合了新出生的兔子第三个月开始生兔子;
因此,

每个月可生的兔子数= 两个月前的兔子总数

		每月新生兔子数 = 每个月可生的兔子数
 
 这样:
每个月总兔子数 = 每个月新生兔子数 + 上个月兔子总数
 也就是: 
每个月总兔子数 = 每个月可生的兔子数 + 上个月兔子总数
 也就是:
每个月总兔子数 = 两个月前的兔子总数 + 上个月兔子总数

这样,从第三个月开始,每个月的兔子总数,就是前两个月的兔子数相加之和
这样就可以写为:

public class Rabbit {
	public static void main(String[]args){
		int num1=1; 		//两个月前的兔子数
		int num2 = 1;		//上个月的兔子总数
		int sum=0;        //兔子总数, 初始化0
		for(int i = 3;i<=20;i++){
			sum = num1 + num2 ;    //每月兔子总数 =  两个月前的兔子数 +上个月的兔子总数
			num1=num2;
			num2=sum;
			
		}
		
		//System.out.println(num1);			
		System.out.println("20个月后兔子总数是:\t"+sum); 		//输出兔子总数
	}
	
}

运行得到 20个月后 兔子总数是: 6765
在这里插入图片描述
也可以使用方法 递归,写为:`

public class Rabbit2 {
	public static void main(String[] args){
	  int n = 20;				//月数
	  System.out.println("第20个月兔子总数为:\t"+sum(n));
	}
	public static int sum(int n){
		if(n==1|| n==2){
		 return 1;
		}else{
		//	
		 return (n-1)+sum(n-2);
		      }
	}
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值