#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
/*这道题其实每一个数都可以在行列坐标系中表达为行/列*/
/*所以我们找出刚好大于10000000的数即可*/
int main()
{
int x[4475];
int n;
scanf("%d",&n);
memset(x,0,sizeof(x));
for(int i = 1;i <= 4473;i++)//x[4473]==10001628
{
x[i] = i+x[i-1];
}
for(int i = 1;i <= 4473;i++) //蛇形分布,斜边要分奇偶
{
if(n==x[i]) //当刚好相等
{
if((n-x[i-1])%2==0)
{
printf("%d/1",i);
break;
}
if((n-x[i-1])%2!=0)
{
printf("1/%d",i);
break;
}
}
if(n < x[i]) //斜边分奇偶
{
if(i%2==0)
{
int m = n - x[i-1];
//新的一个斜边有i个数,差值为m-x[i-1]
//差值为第几行,i-差值+1 为第几列
printf("%d/%d",m,i-m+1);
break;
}
if(i%2!=0)
{
int m = n - x[i-1];
//新的一个斜边有i个数,差值为m-x[i-1]
//差值为列,i-m+1为第几行
printf("%d/%d",i-m+1,m);
break;
}
}
}
return 0;
}
P1014 Cantor表 题解
最新推荐文章于 2022-02-02 22:42:29 发布