题目描述
一只成熟的兔子每天能产下一胎兔子。每只小兔子的成熟期是一天。 某人领养了一只小兔子,请问第N天以后,他将会得到多少只兔子。
输入描述:
测试数据包括多组,每组一行,为整数n(1≤n≤90)。
输出描述:
对应输出第n天有几只兔子(假设没有兔子死亡现象)。
输入例子:
1
2
输出例子:
1
2
不难看出,由于兔子成熟期为1天,因此第 i - 1天的所有兔子到第 i 天全部成熟,构成第i天的成熟兔f(i-1),现在我们来计算第i天有多少只兔子出生。
并不是第i - 1
天的兔子都能进行繁殖,只有第i - 1
成熟的兔子才能繁殖,根据递推关系,第i - 1
天的成熟兔子 == 第 i - 2
天的兔子总数,因此第i天新出生的兔子数为f(i - 2).
最终得到递推关系 f(i) = f(i - 1) + f(i - 2)
.
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
int number = 0;
//scanf返回值为正确输出数据的变量个数,当一个变量都没有
//获取到数据时,此时返回-1
while (scanf("%d", &number) != - 1) {
if (number < 4) {
printf("%d\n", number);
} else {
long long before = 2, now = 3, next = 0;
for (int i = 4; i <= number; ++i) {
next = before + now;
before = now;
now = next;
}
printf("%lld\n", now);
}
}
return 0;
}