现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:
1/11/1 , 1/21/2 , 1/31/3 , 1/41/4, 1/51/5, …
2/12/1, 2/22/2 , 2/32/3, 2/42/4, …
3/13/1 , 3/23/2, 3/33/3, …
4/14/1, 4/24/2, …
5/15/1, …
…
我们以 Z 字形给上表的每一项编号。第一项是 1/11/1,然后是 1/21/2,2/12/1,3/13/1,2/22/2,…
#include<iostream>
using namespace std;
int main(){
int n;
int sum=0;
int hs;//n所在行
int wz;//n在该行第几个;
int fz,fm;
cin>>n;
for(int i=1;i<=n;i++){//找到所在的行数和位置
sum+=i;
if(sum>=n){
hs=i;
wz=i-sum+n;
break;
}
}
if(hs%2==0){//根据行数、位置、分子、分母的关系求出 分子分母
fz=wz;
fm=hs+1-fz;
}
else
{
fm=wz;
fz=hs+1-fm;
}
cout<<fz<<"/"<<fm<<endl;
}