一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?
输入格式:
输入在一行中给出一个不超过10000的正整数N。
输出格式:
在一行中输出兔子总数达到N最少需要的月数。
输入样例:
30
输出样例:
9
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
思路:兔子繁衍问题利用归纳法总结实际上是斐波那契数列 1,1,2,3,5,8,13,...
每个月能够新增的兔子对数实际上是两个月前的兔子对数(兔子第三个月开始生产),故每个月的兔子对数=上个月的兔子对数+新生兔子对数(上上个月的兔子对数)
#include<stdio.h>
/* 兔子繁衍问题利用归纳法总结实际上是斐波那契数列 1,1,2,3,5,8,13,...
每个月能够新增的兔子对数实际上是两个月前的兔子对数(兔子第三个月开始生产)
故每个月的兔子对数=上个月的兔子对数+新生兔子对数(上上个月的兔子对数) */
int main()
{
int N;
int a[1000] = {1,1,}; // 记录每月的兔子对数
int cnt = 1; // 数组下标,计月数用
scanf("%d", &N);
while( a[cnt]<N ){
a[cnt+1] = a[cnt-1] + a[cnt];
cnt ++;
}
if( N==1 ){
printf("%d\n", cnt); // 1对兔子最少需要一个月
} else{
printf("%d\n", cnt+1); // cnt对应数组下标,应再+1为实际月数
}
return 0;
}