1 条题解

  • 0
    @ 2025-7-3 10:31:30

    暴力枚举每一项的每一个

    #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
    上传者