多种方式解决兔子繁殖问题

兔子繁殖问题:
兔子从出生的第三个月开始繁殖,此后每个月都会繁殖,且每次繁殖都为一对异性兔子。
在封闭环境中,有一对异性刚出生的兔子,不考虑死亡,求一年后有多少对兔子。

//通过观察可以发现
//当前月的可生育兔子=上个月的可生育兔子+上上个月新兔子
//第三个月开始生育之后:每个月的新兔子=可生育兔子
//每个月的兔子总数为:当前可生育+当月新兔子+上个月新兔子
//得出公式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+"只兔子");
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐 逸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值