1 条题解
-
0
暴力枚举每一项的每一个
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; // 找到 n 是第几组的第几个 // 假设是第 x 组,第 y 个 // ~ 1+2+...+(x-1) + y == n // ~ 1 <= y && y <= x for (int x = 1;; x++) for (int y = 1; y <= x; y++) if (x * (x - 1) / 2 + y == n) { // 输出第 x 组第 y 个 // 第 x 组分子分母之和为 (x+1) // 偶数组的分子从 1 到 x,奇数组的分母 if (x % 2 == 0) cout << y << "/" << (x + 1) - y << "\n"; else cout << (x + 1) - y << "/" << y << "\n"; return 0; } return 0; }
根据前 i 组数量计算方法快速找到组数
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; // 找到 n 是第几组的第几个 int x, y; // 假设是第 x 组,第 y 个 for (int i = 1;; i++) { // 前 i 组有 1+2+...+i 个数 if (i * (i + 1) / 2 >= n) { x = i; break; } } y = n - x * (x - 1) / 2; // 减去前 x-1 组的数量,就是第 x 组的位置了 if (x % 2 == 0) cout << y << "/" << (x + 1) - y; else cout << (x + 1) - y << "/" << y; return 0; }
- 1
信息
- ID
- 1852
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- 递交数
- 11
- 已通过
- 4
- 上传者