PAT乙级(Basic Level)练习题 养兔子

题目描述
一只成熟的兔子每天能产下一胎兔子。每只小兔子的成熟期是一天。 某人领养了一只小兔子,请问第N天以后,他将会得到多少只兔子。

输入描述:
测试数据包括多组,每组一行,为整数n(1≤n≤90)。

输出描述:
对应输出第n天有几只兔子(假设没有兔子死亡现象)。

输入例子:

1
2

输出例子:

1
2

\color{red}解题思路:
在这里插入图片描述
不难看出,由于兔子成熟期为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).

\color{red}代码实现:

#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;
}

在这里插入图片描述

发布了1005 篇原创文章 · 获赞 269 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/qq_41855420/article/details/104641278