import java.util.Scanner;
public class Main{
public static void main(String[] args){
int month=0;
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
month = sc.nextInt();
int ct_Adult =0;
int sum=0;
int ct_Child1=1;
int ct_Child2=0;
int ct_Child3=0;
for(int i=2;i<=month;i++){
ct_Child3+=ct_Child2;//本月3阶段兔子总数需累加上个月2阶段兔子数
ct_Child2=ct_Child1;//本月2阶段兔子总数即为上个月1阶段兔子数
ct_Child1=ct_Adult;//本月1阶段兔子数即为上个月具有繁殖力的兔子数
ct_Adult=ct_Child2+ct_Child3;//具有繁殖力的兔子
}
sum=ct_Child1+ct_Child2+ct_Child3;
System.out.println(sum);
}
}
}先上代码。
先列出几种情况,寻找规律。按照题意,兔子应该是2月龄怀上的,3月龄产.那么2月龄的兔子和3月龄及以上的兔子 其实都有繁殖能力.这部分有繁殖力的兔子下个月会产生相同数量的小兔子.
每个月兔子的分布情况都会发生变化,3月龄兔子数量=上个月2月龄兔子数量,2月龄兔子数量=上个月1月龄兔子数量.
其实用递归的方式,和斐波那契数列很像,但是为了避免堆栈内存溢出,笔者采用了迭代的方式顺次计算.这个题的测算输入是多组数据,故要用while死循环,不然验证不通过.

京公网安备 11010502036488号