题解#[NOIP1999]Cantor表

[NOIP1999]Cantor表

https://ac.nowcoder.com/acm/contest/19305/1031

原题传送门-->>[NOIP1999]Cantor表

alt

我们可以发现这其实是一道数学规律题,我们发现当该斜线为奇数个时它的顺序是斜向右上的,且规律为分母减一分子加一,当为偶数个时,这个数的变化为斜向下的,规律为分子减一,分母加一,我们可以以左上角为起点,去看等腰三角形我们发现,这个三角形里面每行的数字个数能构成公差为一的等差数列,我们可以求和公式(首项+某项)*项数再除以2,来算这个数是在哪根斜线后面,然后分奇偶讨论就可以出来我们想要的结果了

#include <bits/stdc++.h>
using namespace std;
int main()
{
    
    int n;
    cin>>n;
    int l = 0;
    while(l*(l+1)/2 < n)//在算是哪根斜线
    {
        l++;
    }
    if(l%2!=0)//分情况(奇
    {
        int b = l*(l-1)/2+1;
        int temp = n - b;
        cout<<l-temp<<"/"<<1+temp;
    }
    else {//(偶
        int b = l*(l-1)/2+1;
        int temp = n - b;
        cout<<1+temp<<"/"<<l-temp;
    }
    return 0;
}


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务