1 条题解
-
0
C++ :
#include <iostream> #include <vector> #include <unordered_set> #include <algorithm> using namespace std; int main() { int n; cin >> n; vector<int> A(n + 1); // 存储Recamán序列(索引1~n) unordered_set<int> exist; // 快速判断数字是否已存在 A[1] = 1; // 初始化第一个项 exist.insert(1); // 记录初始值 for (int k = 2; k <= n; k++) { int candidate = A[k - 1] - k; // 计算候选值aₖ₋₁ -k // 判断候选值是否合法且未存在 if (candidate > 0 && !exist.count(candidate)) { A[k] = candidate; } else { A[k] = A[k - 1] + k; // 候选值不合法时取aₖ₋₁ +k } exist.insert(A[k]); // 将新项加入集合 } // 拷贝前n项并排序 vector<int> sorted_A(A.begin() + 1, A.begin() + n + 1); sort(sorted_A.begin(), sorted_A.end()); // 输出排序结果 for (int num : sorted_A) { cout << num << " "; } return 0; }
- 1
信息
- ID
- 5524
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者