一对兔子,从出生后第 3 个月起每个月都生一对兔子。小兔子长到第 3 个月后每个月又生一对兔子。假如兔子都不死,请问第 1 个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到 N 对?
输入格式:
输入在一行中给出一个不超过 10000 的正整数 N。
输出格式:
在一行中输出兔子总数达到 N 最少需要的月数。
输入样例:
30
输出样例:
9
来源:
来源:PTA | 程序设计类实验辅助教学平台
链接:https://pintia.cn/problem-sets/12/exam/problems/297
提交:
题解:
观察发现,第 n 月的兔子数量等于第 n-1 月与 n-2 月的兔子数量之和,也即符合著名的 “斐波那契数列”。斐波那契数列因数学家莱昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为 “兔子数列”。
#include<stdio.h>
/*
* 输出斐波那契数列第 N 项的值
*/
int fibonacci(int n) {
return n == 1 || n == 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2);
}
int main(void) {
int N;
scanf("%d", &N);
int month = 1;
// 依次判断每个月的兔子数量是否大于给定的兔子数量,大于则找到月份数
for (; fibonacci(month) < N; month++);
printf("%d", month);
return 0;
}