现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … … 我们以Z字形给上表的每一项编号。第一项是1/1,然后是1/2,2/1,3/1,2/2,…
输入描述 Input Description
整数N(1≤N≤10000000)
输出描述 Output Description
表中的第N项
样例输入 Sample Input
7
样例输出 Sample Output
1/4
题意:这个题看了别人题解才找到的规律。。。惭愧。。。我们看图可以发现把斜着一排堪称一排,第一排一个数,第二排两个数,以此类推。。第K排K个数,给你一数字n,我们可以判断出这是第几排的第几个数,图中还有一个规律,偶数排是从上往下递推第一个值(从1到K),奇数排是从下往上递推第二个值,这个值就是求出来的第几个数,然后相应的另一个值必然是(K - 第几个数 + 1)
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<set>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
int main()
{
while(scanf("%d",&n) != EOF)
{
int temp = 1;
while(temp < n)
{
n -= temp;
temp ++;
}//temp是求在第几排(斜着算一排),n是求在第几个
if(temp % 2 == 0)
{
printf("%d/%d",n,temp - n + 1);
}
else printf("%d/%d",temp - n + 1,n);
}
return 0;
}