题目
有一对兔子,从出生后第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。
依次往复就可以得到每个月兔子的总数。