洛谷P1014Cantor表第N项

用对角线枚举的方法找到Cantor表的第N项

Sun May 11 2025
366 字 · 3 分钟

🧠 题目描述(洛谷 P1014)

Georg Cantor 用一张 Z 字形编号的表,展示了有理数的可枚举性。如下:

PLAINTEXT
1/1
1/2 2/1
3/1 2/2 1/3
1/4 2/3 3/2 4/1
...

第 N 项是第几对分数?输入 N(1 ≤ N ≤ 10^7),输出对应的 “a/b”。

👉 洛谷题目链接


💡 解题思路

CPP
#include <iostream>
using namespace std;

int main() {
    int t;
    cin >> t;

    // 🌟 用 while 找到所在的对角线编号
    int n = 1;
    while (n * (n + 1) / 2 < t) n++;

    int offset = t - (n - 1) * n / 2;

    if (n % 2 == 0) 
        cout << offset << "/" << (n + 1 - offset);
    else 
        cout << (n + 1 - offset) << "/" << offset;

    return 0;
}


Thanks for reading!

洛谷P1014Cantor表第N项

Sun May 11 2025
366 字 · 3 分钟

Comment