首先可以通过观察得到结论:同一根对角线上横坐标和纵坐标相加为一个定值。并且对角线上的数为(0,0)1个(1,0)(0,1)2个 (0,2) (1,1) (2,0)3个…。以此类推呈等差数列。注:题意z字形为对角线z。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<math.h>
using namespace std;
int a,b,c,d,N;
int main()
{
cin>>N;
a=0;
for(int i=1; i<10000000; i++)
{
a=a+i;//求等差数组和
if(N<=a)//刚好大于等于
{
b=i+1;//b是横坐标加纵坐标的定值
c=a-N;//c是N和等差数组末的距离
d=i;//等差数组末位
break;
}
}
if(d%2==0)//b-1-c(即末位数(b-1)减去到末位数的距离)
{
cout<<b-1-c<<"/"<<1+c;
}
else if(d%2!=0)
{
cout<<1+c<<"/"<<b-1-c;//同上
}
}
//d和末位数大的在/号前面还是后面有关系