关于不死兔子的编程题**
你好! 这是你第一次使用 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);
}
}
}