青训营刷题-64

240 阅读1分钟

64 兔生兔

如果一对兔子每月生一对兔子;一对新生兔,从第二个月起就开始生兔子;假定每对兔子都是一雌一雄,试问一对兔子,第 n 个月能繁殖成多少对兔子?(举例,第1个月是1对兔子,第2个月是2对兔子)

输入格式

  • 数字

输出格式

  • 数字

输入样例

  • 5

输出样例

  • 8

数据范围

  • [1, 75]

测试数据集

  • 样例1
    • 输入:5
    • 输出:8
  • 样例2
    • 输入:1
    • 输出:1
  • 样例3
    • 输入:15
    • 输出:987
  • 样例4
    • 输入:50
    • 输出:20365011074

解题思路

这个问题实际上是经典的斐波那契数列问题。斐波那契数列定义如下:

  • F(1) = 1
  • F(2) = 1
  • F(n) = F(n-1) + F(n-2) ,其中 n > 2

在本问题中:

  • F(n) 表示第 n 个月结束时的兔子总对数。
  • 每对兔子从第二个月起开始生育,每月生一对新兔子。

因此,兔子的增长规律完全符合斐波那契数列。

算法实现


public class Main {
    public static long solution(int A) {
        // Edit your code here
        // 定义两个变量来存储前两个月兔子的数量
        long prevPrev = 1;
        long prev = 1;
        long current = 0;

        for (int i = 2; i <= A; i++) {
            // 计算当前月兔子的数量
            current = prevPrev + prev;  // 关键步骤
            prevPrev = prev;
            prev = current;
        }

        return prev;
    }
    // 1 2 3 5 8 13

    public static void main(String[] args) {
        // Add your test cases here
        System.out.println(solution(5) == 8);
        System.out.println(solution(1) == 1);
        System.out.println(solution(15) == 987);
        System.out.println(solution(50) == 20365011074L);
    }
}