兔子繁殖问题:
兔子从出生的第三个月开始繁殖,此后每个月都会繁殖,且每次繁殖都为一对异性兔子。
在封闭环境中,有一对异性刚出生的兔子,不考虑死亡,求一年后有多少对兔子。
//通过观察可以发现
//当前月的可生育兔子=上个月的可生育兔子+上上个月新兔子
//第三个月开始生育之后:每个月的新兔子=可生育兔子
//每个月的兔子总数为:当前可生育+当月新兔子+上个月新兔子
//得出公式F(n)=F(n-1)+F(n-2)
不用公式计算
一
//不用数组
int x=0;//上上个月新兔子
int b=1;//上个月可生育兔子
for(int y=1;y<13;y++ ){
if(y<3){
//一月,二月不生育
System.out.println("第"+y+"个月有"+b+"只兔子");
}else if(y==3){
//三月后一个月没有增加可生育兔子
System.out.println("第"+y+"个月有"+(b+b+x)+"只兔子");
}else {
//三月之后进行当前可生育兔子运算
int s=x+b;//当前可生育兔子
x=b;//把x变为上个月可生育,参与下次运算时即为上上个月新兔子
b=s;//把b变为当前月可生育,参与下次运算时即为上个月可生育兔子
System.out.println("第"+y+"个月有"+(s+s+x)+"只兔子");
}
}
二
//用数组方式
int [] tz=new int [13];//存放计算出的每个月兔子总数
for(int a=0;a<12;a++){
if(a<2){
//先确定一月和二月的总数
tz[a]=1;
System.out.println("第"+(a+1)+"个月有"+tz[a]+"只兔子");
}else{
//再计算之后每个月的值
tz[a]=tz[a-1]+tz[a-2];
System.out.println("第"+(a+1)+"个月有"+tz[a]+"只兔子");
}
}
采取F(n)=F(n-1)+F(n-2)的方式计算
一
//数组方式
int [] zs=new int[3];//存放n-2,n-1,n的数值
zs[0]=1;//n-2的数值
zs[1]=1;//n-1的数值
System.out.println("第1个月有"+zs[0]+"只兔子");
System.out.println("第2个月有"+zs[1]+"只兔子");
for(int c=3;c<13;c++){
zs[2]=zs[0]+zs[1];//n的数值
zs[0]=zs[1];
zs[1]=zs[2];
System.out.println("第"+c+"个月有"+zs[2]+"只兔子");
}
二
//不用数组
int a1=1;//n-2的数值
int a2=1;//n-1的数值
int a3;
System.out.println("第1个月有1只兔子");
System.out.println("第2个月有1只兔子");
for(b=3;b<13;b++){
a3=a1+a2;//n的数值
a1=a2;
a2=a3;
System.out.println("第"+b+"个月有"+a3+"只兔子");
}