兔子生崽问题(4分)
题目内容:
假设一对小兔的成熟期是一个月,即一个月可长成成兔,那么如果每对成兔每个月都可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,n(n<=12)月以后可有多少对兔子(即当年第n月份总计有多少对兔子,含成兔和小兔)?请编程求解该问题,n的值要求从键盘输入。
参考答案:依题意,兔子的繁殖情况如图所示。图中实线表示成兔仍是成兔或者小兔长成成兔;虚线表示成兔生小兔。观察分析此图可发现如下规律:
(1)每月小兔对数 = 上个月成兔对数。
(2)每月成兔对数 = 上个月成兔对数 + 上个月小兔对数。
综合(1)和(2)有:每月成兔对数 = 前两个月成兔对数之和。
用fn(n=1,2,…)表示第n个月成兔对数,于是可将上述规律表示为如下递推公式:
程序运行示例:
Input n(n<=12):
10↙
1 2 3 5 8 13 21 34 55 89
Total=89
输入提示:“Input n(n<=12):\n”
输入格式:“%d”
输出格式:
每个月兔子对数的输出格式: “%4d”
第12个月的兔子总数的输出格式: “\nTotal=%d\n”
#include<stdio.h>
int rabbit(int number);
int main(){
int n=0;
printf("Input n(n<=12):\n");
scanf("%d",&n);
for(int x=1;x<=n;x++)
{
if(x==1)
printf("%4d",rabbit(x));
else
printf("%4d",rabbit(x)+rabbit(x-1));
}
printf("\nTotal=%d\n",rabbit(n)+rabbit(n-1));
return 0;
}
int rabbit(int number)
{
int count=0;
if(number==1||number==2)
count=1;
else
count=rabbit(number-1)+rabbit(number-2);
return count;
}