一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?
输入格式:
输入在一行中给出一个不超过10000的正整数N。
输出格式:
在一行中输出兔子总数达到N最少需要的月数。
输入样例:
30
输出样例:
9
理解斐波那契数列的好题!!!
这个题就是要搞清楚一点,就是一只兔子究竟要过几个月后才会生孩子。答案是两个月。把这道题的思路写出来就如下所示:
int N ;
scanf("%d",&N) ;
int xin = 1, lao = 0 , total = 1 ; //当月的新兔子,老兔子,兔子总和
int i = 1 ; // 月份
if( N == 1){
goto OUT ;
}
while( total < N ){
i++ ;
xin = lao ;//上个月的老兔子数量和这个月呃新兔子相等
lao = total ;//上个月的总和和这个月的老兔子数量相等
total = xin + lao ;
}
OUT:
printf("%d",i) ;
本质上是一个数列:
a
1
=
1
,
a
2
=
1
,
a
n
=
a
n
−
1
+
a
n
−
2
a_{1}=1,a_{2}=1,a_{n}=a_{n-1}+a_{n-2}
a1=1,a2=1,an=an−1+an−2
该数列即为斐波那契数列。