问题:
将一对刚出生的兔子关在围墙里,已知一对兔子每个月可以生一对小兔子,每对兔子从出生后两个月(进入青年可每月生一对)每月生一对小兔子。
*问一年后生了多少?
分析:
月份 幼年 青年 青年 青年 青年 青年 青年 ... 对
1月 2 1
2 2 1=1+0
3 2 2 2=1+1
4 2 2 2 3=2+1
5 4 2 2 2 5=3+2
6 6 4 2 2 2 8=5+3
7 10 6 4 2 2 2 13 ...
8 16 10 6 4 2 2 21
9 26 16 10 6 4 2 2 34
10 42 26 16 10 6 4 2 2 55
11 68 42 26 16 10 6 4 2 2 89
12 178 68 42 26 16 10 6 4 2 2 144
经过以上分析,刚出生的排在表格的最前面,
并且出生的数量是:上一行去掉幼年的总和(因为只有上一行的青年才可以生)
将每一行的数量加起来除以二就是兔子的对数,对数符合斐波那契数列:
下一个数,等于前两个数相加,所以利用此规律进行循环相加,代码如下:
/**
*将一对刚出生的兔子关在围墙里,已知一对兔子每个月可以生一对小兔子,每对兔子从出生后两个月(进入青年可每月生一对)每月生一对小兔子。
*问一年后生了多少?
*/
/* 月份 幼年 青年 青年 青年 青年 青年 青年 ... 对
1月 2 1
2 2 1=1+0
3 2 2 2=1+1
4 2 2 2 3=2+1
5 4 2 2 2 5=3+2
6 6 4 2 2 2 8=5+3
7 10 6 4 2 2 2 13 ...
8 16 10 6 4 2 2 21
9 26 16 10 6 4 2 2 34
10 42 26 16 10 6 4 2 2 55
11 68 42 26 16 10 6 4 2 2 89
12 178 68 42 26 16 10 6 4 2 2 144
经过以上分析,刚出生的排在表格的最前面,
并且出生的数量是上一行去掉最前面的总和(因为只有上一行的青年才可以生)
将每一行的数量加起来除以二就是对数,对数符合斐波那契数列
下一个数,等于前两个数相加,所以利用此规律进行循环相加
*/
public class My7_6_11{
public static void main (String [] args ){
int sum = 0;
//定义第1个月的对数
int mouth1 = 1;
System.out.println("第1个月的对数为:1对");
//定义第2个月的对数
int mouth2 = 1;
System.out.println("第2个月的对数为:2对");
//第3个月的对数等于前两个月相加
for( int i = 3 ; i <=12 ; i++ ){
sum = mouth1 + mouth2;
System.out.println("第"+i+"个月的对数为:"+sum+"对");
//将等式右边换成 Sum + number2 这样下一轮计算结果就是前两个数之和(1+2);
mouth1 = mouth2;
mouth2 = sum;
}
System.out.print("经过12个月,一共生了兔子"+sum+"对");
}
}
总结:
兔子繁殖问题最主要的是弄清数学原理,耐心看完并执行代码,希望对阅读者有所帮助,不明白了评论区留言,第一时间为您解答,一起努力加油!