古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总对数为多少?
- 下边的分析是通过Excel表格做出来的,因为不知道它具体生产的情况,所以就一个月一个月的试,最后得到下列的情况
/**
* 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
* 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,
* 问每个月的兔子总对数为多少?
* 第一月 :(1)1
* 第二月 :(1)1
* 第三月 :(2)1+1
* 第四月 :(3)1+1+1
* 第五月 :(5)1+1+1+1+1
* 第六月 :(8)1+1+1+1+1+1+1+1
* 第七月 :(13)1+1+1+1+1+1+1+1+1+1+1+1+1
* 第八月 :(21)1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
* 第九月 :(34)1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
* 第十月 :(55)1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
* 第十一月:(89)1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
* 第十二月:(144)1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
*
* 根据上边的分析,很明显,
* 当前月的兔子总对数=前两个月兔子对数和
*
* 第三月:1+1=2
* 第四月:1+2=3
* 第五月:2+3=5
* 第六月:3+5=8
* 第七月:5+8=13
* 第八月:8+13=21
* 第九月:13+21=34
* 第十月:21+34=55
*/
public static void rabbit(){
int month = 0;
Scanner in = null;
try{
month = getMonth(in,month,"请输入你饲养兔子的月份:");
if(month<1){
month = getMonth(in,month,"月份不能小于1个月,请重新输入饲养兔子的月份:");
}
}catch(Exception e){
month = getMonth(in,month,"你输入的月份不合法,请重新输入饲养兔子的月份:");
}
long [] rb= new long[month];
for(int i=0;i<month;i++){
if(i<2){
// 给第一月,第二月赋默认值为1,因为前两个月没有兔子出生
rb[i]=1;
}else{
// 从第三月开始,每月的兔子总对数=前两个月兔子对数的和
rb[i]=rb[i-2]+rb[i-1];
}
System.out.print("第"+(i+1)+"月的兔子总对数:"+rb[i]);
}
}
/**
* 获取输入的月份
* @param in
* @param month
* @return
*/
@SuppressWarnings("resource")
public static int getMonth(Scanner in,int month,Object o){
in= new Scanner(System.in);
System.out.print(o);
return in.nextInt();
}