题目链接

藻类植物

题目描述

我们用 表示第 年年初池塘中藻类植物的总重量。池塘中藻类植物的发展满足递推关系:。 现在给你相关的初始参数,请你计算未来十年里每年年初池塘中藻类植物的总重量。

解题思路

本题是一个简单的递推关系模拟问题。然而,题目描述中关于输入变量的说明与给出的示例输入输出不完全匹配,这需要我们首先根据示例来推断正确的计算逻辑。

1. 从示例反推规律

给定的示例输入为 2 10 20,输出为 30, 50, 90, 170, ...。 设第 年的重量为 。那么输出序列的开头是 。 我们假设关系式为

  • 对于 :
  • 对于 :

联立这两个方程,我们得到:

代入第一个方程:

所以,正确的递推关系是

2. 关联输入与参数

我们已经推断出 。 根据公式,我们可以计算出 的值:

我们将推断出的参数 与输入 2 10 20 对应,可以合理地假设输入的三个整数分别代表

3. 算法实现

因此,解题步骤如下:

  1. 读取三个整数,分别视为 (初始为 )。
  2. 循环 10 次,模拟未来 10 年。
  3. 在每次循环中,应用公式 计算下一年的重量。
  4. 输出
  5. 更新 以便进行下一次计算。

代码

#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 次。
  • 空间复杂度:,只需要常数级别的变量来存储 和当前的重量