题目描述
现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:
我们以 Z 字形给上表的每一项编号。第一项是 1/1,然后是 1/2,2/1,3/1,2/2,…
输入格式
整数N(1≤N≤107)。
输出格式
表中的第 N 项。
输入输出样例
输入 #1复制
7
输出 #1复制
1/4
思路:原版表 1/1 1/2 1/3 1/4 1/5 1/6......
2/1 2/2 2/3 2/4 2/5......
...... ....... ......
Cantor 改表后 1/1
1/2 2/1
1/3 2/2 3/1
...... ...... ......
观察发现:原版表都是i/j,改版后是吧原版表竖过来看
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i=1,k=0,x=0,y=0;
cin>>n;
while(i<n){
n=n-i;
i++;
} //此时的n就是这个数所在的行
k=n-1; //和第一行之间的
if(i%2==0) x=1+k,y=i-k; //如果是偶数行,那书的顺序不变
else x=i-k,y=1+k; //如果是奇数行,那书的顺序相反
cout<<x<<"/"<<y;
return 0;
}