古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
我第一次写的代码是
public static void main(String[] args) {
// TODO Auto-generated method stub
int sum =2;
int mounth;
Scanner in = new Scanner(System.in);
mounth=in.nextInt();
if(mounth>3) {
for(int i=0;i<mounth-3;i++){
sum=sum*2;
System.out.println(sum);
}
}
}
}
错误原因:有三点(1)首先单位是对 不是只 写代码要看清需求不可马虎大意
(2)我的代码排除了月份在3以内的结果 这是不正确的 应该做到每个月都可以输出结果
(3)新出生的兔子需要3个月才能生育 ,并没有考虑到
答案:首先兔子的对数按月是
1月 1对
2月 1对
3月 2对(T1生了T2)
4月 3对 (T1生了t3)
5月 5对 (t1生了T4 T2生了T5)
6月 8对 (T1生了T6 t2生了t7 t3升了t8)
7月 13对 。。。。。。
兔子的规律数为 1 1 2 3 5 8 13
得出从第3个月开始 兔子的数量为前两个月的和
于是我又第二次更改代码为
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.print("请输入你想知道的兔子数量的月份:");
Scanner in=new Scanner(System.in);
int mounth=in.nextInt();//获取输入的整数
System.out.println("第"+mounth+"个月兔子总数为"+sum(mounth));
scanner.close();
}
//求得所需月份的兔子的数量,返回值为兔子的数量
private static int sum(int mounth){
if(mounth==1 || mounth==2)
{ return 1;
}
else
{ return sum(mounth-1)+sum(mounth-2); //此处会循环调用sum()函数
}
}
}