生物学家小 R 正在研究一种特殊的兔子品种的繁殖模式。这种兔子的繁殖遵循以下规律:
- 每对成年兔子每个月会生育一对新的小兔子(一雌一雄)。
- 新生的小兔子需要一个月成长,到第二个月才能开始繁殖。
- 兔子永远不会死亡。
小 R 从一对新生的小兔子开始观察。他想知道在第 A 个月末,总共会有多少对兔子。
请你帮助小 R 编写一个程序,计算在给定的月份 A 时,兔子群体的总对数。
注意:
- 初始时有 1 对新生小兔子。
- 第 1 个月末有 1 对兔子:原来那对变成了成年兔子,并开始繁殖。
- 第 2 个月末有 2 对兔子:原来那 1 对成年兔子,繁殖了 1 对新生的小兔子。
- 从第 3 个月开始,兔子群体会按照上述规律增长。
输入
一个整数 A(1 ≤ A ≤ 50),表示月份数。
返回
一个长整数,表示第 A 个月末兔子的总对数。
测试样例
样例1:
输入:
A = 1
返回:1
样例2:
输入:
A = 5
返回:8
样例3:
输入:
A = 15
返回:987
Java
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 初始化前两个月的兔子对数
long prev1 = 1; // F(1)
long prev2 = 2; // F(2)
long current = 0;
// 从第三个月开始计算
for (int i = 3; i <= A; i++) {
// 计算当前月的兔子对数
current = prev1 + prev2;
// 更新前两个月的兔子对数
prev1 = prev2;
prev2 = current;
}
return current;
}
public static void main(String[] args) {
// Add your test cases here
System.out.println(solution(1) == 1L);
System.out.println(solution(5) == 8L);
System.out.println(solution(15) == 987L);
}
}
12
public class Main { public static long solution(int A) {
MarsCode AI
MarsCode AI
好的,让我们来逐步解决这个问题。根据题目描述,这是一个典型的斐波那契数列问题。斐波那契数列的定义是:
- F(1) = 1
- F(2) = 2
- F(n) = F(n-1) + F(n-2) 对于 n > 2
我们可以使用递归或迭代的方式来实现这个逻辑。为了提高效率,通常使用迭代方法来避免递归带来的性能问题。
以下是一些代码提示,帮助你完成 solution 方法:
java
public class Main {
public static long
solution(int A) {
// 处理特殊情况
if (A == 1)
return 1;
if (A == 2)
return 2;
// 初始化前两个月的兔
子对数
long prev1 =
1; // F(1)
long prev2 =
2; // F(2)
long current = 0;
// 从第三个月开始计算
for (int i = 3; i
<= A; i++) {
// 计算当前月的
兔子对数
current =
prev1 + prev2;
// 更新前两个月
的兔子对数
prev1 = prev2;
prev2 =
current;
}
return current;
}
public static void
main(String[] args) {
// Add your test
cases here
System.out.println
(solution(1) ==
1L);
System.out.println
(solution(5) ==
8L);
System.out.println
(solution(15) ==
987L);
}
}
代码解释:
- 特殊情况处理:如果
A是 1 或 2,直接返回对应的值。 - 初始化:
prev1和prev2分别表示前两个月的兔子对数。 - 迭代计算:从第三个月开始,使用循环计算每个月的兔子对数,并更新
prev1和prev2。
你可以根据这个框架继续完善代码,确保逻辑正确并符合题目要求。
如何优化递归解法以避免重复计算?
给我一些代码提示
帮我检查一下编辑区的代码