目录
目录题目
一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?
输入格式:
输入在一行中给出一个不超过10000的正整数N。
输出格式:
在一行中输出兔子总数达到N最少需要的月数。
输入样例:
30
输出样例:
9
思路
月份 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
兔子 (队) | 1 | 1 | 1+1=2 | 2+1=3 | 3+2=5 | 5+3=8 | 8+5=13 | 13+8=21 | 21+13=34 |
当月兔子总队数=前一个月的兔子队数加上新生的兔子队数
新生的兔子队数取决于当月前数第二个月的兔子队数。因为兔子出生后第3个月成熟,成熟之后每队兔子每个月都会生1队小兔子,前数第二个月的兔子刚好都在当月会生新兔子,若再往前一个月则会漏掉前数第二个月刚成熟可生崽的兔子,若再往后一个月,即前一个月,则会多了未成熟的兔子,他们还不会生新兔子。
因此,从第三个月起,每个月的兔子总队数为前两个月的兔子数之和(斐波那契数)
代码
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a=1,b=1,t=1;
int m=2;
if(n==1)
{
printf("1\n");
return 0;
}
for(;t<n;m++)
{
t=a+b;
a=b;
b=t;
}
printf("%d\n",m);
return 0;
}