package mr.y.arithmetic;
/**
*
* 有一对兔子,从出生后第3个月起每个月都生一对兔子,
* 小兔子长到第三个月后每个月又生一对兔子,假如兔子
* 都不死,问每个月的兔子总数为多少?
*
*
*问题分析:
* 月数: 1 2 3 4 5 6 7 8 …
* 兔子: 1 1 2 3 5 8 13 21…
*
* 规律很明显,n月兔子数 = (n-1)兔子数+(n-2)兔子数 其中 n>2
* 但是我们要理解规律为什么是这样。
*
* 假设 我们要算 第n个月兔子的 总数, 那么应该是这样
* 上个月兔子总数 + 这个月出生的兔子总数
* 上个月兔子总数 应该是 n-1月的兔子数
* 这个月出生的兔子总数应该怎么获得? 根据题目可知道, 这个月能生育的兔子 应该是最少生长了2个月了,
* 所以2个月前出生的兔子到这个月都会生下1对兔子 ,那么两个月前 有多少对 兔子?结果很明显了
*
*/
public class TestRabbit {
public static void main(String[] args) {
System.out.println(getRabbitCount(3));
}
public static long getRabbitCount(long n){
if(n<1){
return 0;
}
if(n<3){
return 1*2;
}
long sum1 = 1;
long sum2 = 1;
long sum = 0;
for(long i=3; i<n+1; i++){
sum = sum1+sum2;
sum2 = sum1;
sum1 = sum;
}
return sum*2;
}
}
/**
* 程序结束, 如果有误, 还望大神指导 时间:2017年1月9日17:40:59
*/