题目要求
现有一对兔子,每一对兔子每个月都会生一对小兔子,小兔子在月龄达到第三个月开始每个月就可以生一对,兔子不会出现生老病死,经过一年,每个月兔子总数有多少对?
题目分析
- 先从月份下手,发现题目要求是经过一年,所以就是12个月,使用while循环来模拟月份的更替。
//定义初始的月份为0,一进到循环里面就+1,第一次循环就是从1月份开始
int month = 0;
while(month < 12){
month += 1;
...
}
- 那么每个月都要进行生产,每个月小兔子的月龄都要+1(3+月龄的老兔子不用管月龄)。解决这两个问题也很简单,上面第一条我们已经把月份更替的代码写出来了,把这两个问题的解决代码写在循环里面就行了。生产的话,就是有多少对可以生产,就再生出几对,就存在每月新生数量和可以生产数量的关系为1:1。
- 怎么记录 可以生产、1月龄、2月龄这三种兔子的数量呢,我们可以申明三个变量来分别存储,其中1月龄、2月龄变量的初始值都为0,每循环一次,就把2月龄的数量加到可以生产的数量里面,再把1月龄数量设为2月龄数量,再把循环本月新生的数量设为1月龄的数量,就结束了一个月生产及月龄的变化问题。
java代码示例
public static void main(String[] args){
// 原始的兔子数量(3月龄及以上)
int rabbit3_num = 1;
// 1月龄数量
int rabbit1_num = 0;
// 2月龄数量
int rabbit2_num = 0;
// 兔子总对数
int count_rabbit = 0;
// 每个月份生一遍
int month = 0;
while(month < 12){
month += 1;
// 每一对兔子都生一下来一对
int now_month_num = 0;//本月生出的数量
// 把二月的加入到可以生产的兔子中(上次循环就已经加入二月的兔子)
rabbit3_num += rabbit2_num;
// 把出生一个月的兔子加到二月龄中
rabbit2_num = rabbit1_num;
// 进行生产,1:1进行生产
now_month_num = rabbit3_num;
// 把本月生下来的赋给一月龄
rabbit1_num = now_month_num;
// 计算出总兔子对数
count_rabbit = rabbit3_num + rabbit2_num + rabbit1_num;
// 结果输出
System.out.println("经过"+month+"月,共有"+count_rabbit+"对");
}
}