题解#[NOIP1999]Cantor表
[NOIP1999]Cantor表
https://ac.nowcoder.com/acm/contest/19305/1031
我们可以发现这其实是一道数学规律题,我们发现当该斜线为奇数个时它的顺序是斜向右上的,且规律为分母减一分子加一,当为偶数个时,这个数的变化为斜向下的,规律为分子减一,分母加一,我们可以以左上角为起点,去看等腰三角形我们发现,这个三角形里面每行的数字个数能构成公差为一的等差数列,我们可以求和公式(首项+某项)*项数再除以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;
}
查看17道真题和解析