以下是解决该问题的 C++ 代码: ```cpp #include <iostream> #include <vector> using namespace std; // 函数用于构造满足条件的序列 vector<long long> constructSequence(int n, int m) { vector<long long> a(n); // 初始化前 m 个数 for (int i = 0; i < m; ++i) { a[i] = i + 1; } // 从第 m 个数开始构造 for (int i = m; i < n; ++i) { // 计算前 m 个数的和 long long sum = 0; for (int j = i - m + 1; j < i; ++j) { sum += a[j]; } // 找到一个合适的完全平方数 long long targetSum = (i - m + 1) * (i - m + 1); // 计算当前位置的数 a[i] = targetSum - sum; // 保证序列严格递增 if (a[i] <= a[i - 1]) { a[i] = a[i - 1] + 1; } } return a; } int main() { int n, m; cin >> n >> m; // 调用构造函数 vector<long long> result = constructSequence(n, m); // 输出结果 for (int i = 0; i < n; ++i) { if (i > 0) { cout << " "; } cout << result[i]; } cout << endl; return 0; } ``` 代码解释: 1. `constructSequence` 函数: - 首先,我们初始化序列的前 `m` 个数为 `1` 到 `m`。 - 然后,从第 `m` 个数开始,我们计算前 `m` 个数的和,并找到一个合适的完全平方数作为当前连续 `m` 个数的和。 - 通过完全平方数减去前 `m - 1` 个数的和,得到当前位置的数。 - 我们检查当前数是否小于等于前一个数,如果是,则将其设置为前一个数加 `1`,以保证序列严格递增。 2. `main` 函数: - 读取输入的 `n` 和 `m`。 - 调用 `constructSequence` 函数构造序列。 - 输出构造好的序列。 额外注意的逻辑点: 1. 确保完全平方数的选择不会导致序列中的数超出 `[-10^12, 10^12]` 的范围。 2. 在保证序列严格递增时,需要注意更新当前数的逻辑,避免出现错误。 3. 在计算连续 `m` 个数的和时,要注意循环的边界条件,避免越界访问。 [2025-07-10 15:27:57 | AI写代码神器 | 697点数解答]