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死循环,不然验证不通过.