CSP历年复赛题-P1014 [NOIP1999 普及组] Cantor 表

原题链接:https://www.luogu.com.cn/problem/P1014

题意解读:根据z字形遍历,求第n个数。

解题思路:

根据题意,遍历顺序如下图所示

观察得知,第i层的x/y的x+y = i + 1,并且

如果i是偶数,x从1开始枚举;如果i是奇数,x从i开始枚举

100分代码:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin >> n;
    int i = 1;
    int cnt = 0;
    while(true)
    {
        if(i % 2 == 0)  //偶数从1/i开始枚举
        {
            for(int x = 1; x <= i; x++)
            {
                if(++cnt == n)
                {
                    cout << x << "/" << i + 1 - x;
                    return 0;
                }
            }
        }
        else //奇数从i/1开始枚举
        {
            for(int x = i; x >= 1; x--)
            {
                if(++cnt == n)
                {
                    cout << x << "/" << i + 1 - x;
                    return 0;
                }
            }
        }
        i++;
    }
}   

 

posted @ 2024-05-20 11:29  五月江城  阅读(35)  评论(0编辑  收藏  举报