🐰🐰繁殖问题
现在有一对兔子,从出生起第三个月起每个月都生一对兔子。新生的一对兔子出生后第三个月也每月生一对兔子。假如兔子都不死。问到第几个月时,兔子总数为n对?
🐰🐰🐰🐰🐰🐰🐰🐰🐰🐰🐰🐰🐰🐰🐰🐰
变量描述:
(注意问题和解题都是以“对”为单位的)
- n1:幼年兔数量。(处于出生第一个月)
- n2:过渡兔数量。(处于出生第二个月)
- n :成年兔数量。(出生超过2个月 可以生小兔子的)
- sum:兔子总数量。
——————————————————
算法思路:
计算第i个月的兔子总对数
1.先算成年兔n的数量
第i月成年兔对数=第i-1月成年兔对数+第i-1月的过渡兔对数。
C语言描述:n=n+n2;
2.再计算过渡兔对数
第i月过渡兔对数=第i-1月幼年兔对数
C语言描述:n2=n1;
3.最后计算幼年兔对数
第i月幼年兔对数=第i月成年兔对数
C语言描述:n1=n;
4.最后计算总兔子对数
第i月总兔子对数=第i月幼年兔+过渡兔+成年兔
C语言描述:sum=n1+n2+n;
——————————————————
表格
代码:
#include<stdio.h>
int main(){ int num,i = 1;
int n1 = 1,n2 = 0,n = 0,sum = 1;
printf("请输入兔子总对数(至少为2):");
scanf("%d",&num);
printf("\n\n___________________________兔子繁殖表格___________________________\n") ;
printf("\n第i月\t幼年兔对数\t过渡兔对数\t成年兔对数\t兔子总对数\n");
printf("%5d\t%10d\t%10d\t%10d\t%10d\n",i,n1,n2,n,sum) ;
for(i=2;sum<num;++i)
{
n = n+n2;
n2 = n1;
n1 = n;
sum = n1+n2+n; printf("%5d\t%10d\t%10d\t%10d\t%10d\n",i,n1,n2,n,sum) ;
}
printf("____________________________________________________________________\n\n") ;
printf("因此,第 %d 个月繁殖的兔子总对数为%d\n",i-1,num);
return 0;
}
样例:
请输入兔子总对数(至少为2):6
___________________________兔子繁殖表格___________________________
第i月 幼年兔对数 过渡兔对数 成年兔对数 兔子总对数
1 1 0 0 1
2 0 1 0 1
3 1 0 1 2
4 1 1 1 3
5 2 1 2 5
6 3 2 3 8
____________________________________________________________________
因此,第 6 个月繁殖的兔子总对数为6