题目链接
题目描述
我们用 表示第
年年初池塘中藻类植物的总重量。池塘中藻类植物的发展满足递推关系:
。
现在给你相关的初始参数,请你计算未来十年里每年年初池塘中藻类植物的总重量。
解题思路
本题是一个简单的递推关系模拟问题。然而,题目描述中关于输入变量的说明与给出的示例输入输出不完全匹配,这需要我们首先根据示例来推断正确的计算逻辑。
1. 从示例反推规律
给定的示例输入为 2 10 20
,输出为 30, 50, 90, 170, ...
。
设第 年的重量为
。那么输出序列的开头是
。
我们假设关系式为
。
- 对于
:
- 对于
:
联立这两个方程,我们得到:
将 代入第一个方程:
所以,正确的递推关系是 。
2. 关联输入与参数
我们已经推断出 和
。
根据公式,我们可以计算出
的值:
。
我们将推断出的参数 与输入
2 10 20
对应,可以合理地假设输入的三个整数分别代表 。
3. 算法实现
因此,解题步骤如下:
- 读取三个整数,分别视为
(初始为
)。
- 循环 10 次,模拟未来 10 年。
- 在每次循环中,应用公式
计算下一年的重量。
- 输出
。
- 更新
以便进行下一次计算。
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
long long r, k, w;
// 根据分析,输入顺序为 r, k, w1
cin >> r >> k >> w;
for (int i = 0; i < 10; ++i) {
w = r * w - k;
cout << w << endl;
}
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 根据分析,输入顺序为 r, k, w1
long r = sc.nextLong();
long k = sc.nextLong();
long w = sc.nextLong();
for (int i = 0; i < 10; i++) {
w = r * w - k;
System.out.println(w);
}
}
}
def solve():
# 根据分析,输入顺序为 r, k, w1
r, k, w = map(int, input().split())
for _ in range(10):
w = r * w - k
print(w)
solve()
算法及复杂度
- 算法:模拟
- 时间复杂度:
,因为循环的次数是固定的 10 次。
- 空间复杂度:
,只需要常数级别的变量来存储
和当前的重量
。