C语言:兔子生娃

题目

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

实现代码

#include <stdio.h>
int main()
{
	int hare=2,new_hare1=0,new_hare2=0,sum=0,month=0,i=0;
	printf("输入月数:\n");
	scanf("%d",&month);
	if(month<3){//判断月数,小于3时兔子还未具有生育能力
		sum=hare;
		printf("第%d个月 可生育兔子数:0  新生兔子数:%d 兔子总数:%d\n",month,new_hare1,sum);
	}else{
		for(i=3;i<=month;i++){//从第3个月开始,兔子具备生娃能力
			if(i%2==1){           //记录兔子可生育数和新生数,第二次进入该if语句时
                                  // new_hare1记录的新生兔子已经间隔俩个月,具备了生育能力    
				hare+=new_hare1;   //hare记录可生育兔子数
				new_hare1=hare;    //new_hare1记录兔子新生数
				sum=hare+new_hare1+new_hare2; //兔子总数
				printf("第%d个月 可生育兔子数:%d  新生兔子数:%d 兔子总数:%d\n",i,hare,new_hare1,sum);
			}
			if(i%2==0){           //记录兔子可生育数和新生数,第二次进入该if语句时
                                  // new_hare2记录的新生兔子已经间隔俩个月,具备了生育能力
				hare+=new_hare2;  //hare记录可生育兔子数
				new_hare2=hare;    //new_hare1记录兔子新生数
				sum=hare+new_hare1+new_hare2;    //兔子总数
				printf("第%d个月 可生育兔子数:%d  新生兔子数:%d 兔子总数:%d\n",i,hare,new_hare2,sum);
			} 
		}
	}
	
	return 0;
}

输出效果

解题思路

新生一对兔子第三个月会生下一对新兔子,此时第一第二个月是没有新生兔子的,要判断月数是否大于等于3,此时在第三个月兔子已经具备生育能力,可生育兔子记录为hare,记录新兔子的数量记录为new1,没有新的可生育数量。第四个月记录新生兔子数量记录new2,第四月也没有新的可生育兔子。在第五个月时第三个月的新生兔子已经具备了生育能力,此时新的可生育兔子hare=hare+new1,该月新生兔子等同于可生育兔子,所以为new1存入新生兔子数为new1=hare,此时兔子总数等于这个月新生数new1加上上个月新生数new2再加上可生育兔子总数hare:sum=hare+new1+new2。

依次往复就可以得到每个月兔子的总数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值