题目描述
如下数列,前5项分别是1/1,1/2,2/1,3/1,2/2……。输入n,输出第n项。
1/1
2/1
3/1
4/1
5/1
样例输入
3
14
7
12345
样例输出
2/1
2/4
1/4
59/99
分析:按照斜线分类。第一条斜线有1个数,第二条斜线有2个数。。。。第i条斜线上有i个数。是S(k)=1+2+3+4+...+k;只要找到一个最小得正整数k,使得n<=S(k),那么n就是第k条斜线上的倒数第S(k)-n+1个元素,,第k条斜线上的倒数第i个元素是 i/(k+1-i)。(按S型来找第n项,奇,偶斜线看数的顺序是不一样的)。
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
int sum=0;
for(int i=1;;i++)
{
sum+=i;
if(sum>=n)
{
if(i%2)
{
printf("%d/%d\n",sum-n+1,i-sum+n);
break;
}
else
{
printf("%d/%d\n",i-sum+n,sum-n+1);
break;
}
}
}
}
return 0;
}