一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?
输入格式:
输入在一行中给出一个不超过10000的正整数N。
输出格式:
在一行中输出兔子总数达到N最少需要的月数。
输入样例:
30
输出样例:
9
# include <stdio.h>
int main()
{
int N; //N表示需要的兔子总对数
scanf_s("%d", &N);
/*兔子繁殖问题相当于斐波那契数列,第1个月1对,第2个月1对,第3个月3对,
数列为1、1、2、3、5、8、13、21、34、……
式子为a(1) = 1,a(2) = 1, a(n) = a(n - 1) + a(n - 2)(n >= 3,n是正整数),
比如2、3、5这段,第三个月兔子有2对,第四个月兔子有3对,第五个月兔子有5对,
因为第三个月的兔子只有2对,而每隔两个月才会生兔子,
所以第五个月比第四个月新生的兔子是第三个月的两对兔子生的,
第五个月的兔子对数等于第三个月和第四个月的兔子对数的和。a(5)=a(4)+a(3)
*/
int n1 = 1, n2 = 1, n3, t, month;//n3表示a(n),n2表示a(n-1),n1表示a(n-2)
if (N == 1) //第1个月的时候就有1对兔子了
month = 1;
else
{
//法1 do-while循环
month = 2;
do {
n3 = n1 + n2;
t = n1;
n1 = n2;
n2 = n3;
month++;
} while (n3 < N);
//法2 while循环
/*
n3 = n1 + n2;
month = 3; //第3个月才有2对兔子
while (n3 < N)
{
t = n1;
n1 = n2;
n2 = n3;
n3 = n1 + n2;
month++;
}
*/
}
printf("%d", month);
return 0;
}