现代数学的著名证明之一是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,…
题解:
按照斜行的个数来找到第N个数在表中的位置,根据位置与表的关系,求出行列值。
首先根据(2*N>n*(n-1))&&(2*N<=n*(n+1))求出n的值,判断n的奇偶。
代码如下:
#include<iostream>
using namespace std;
int main()
{
int N;
cin>>N;
int n;
for(n=1;n<2*N;n++)
{
if((2*N>n*(n-1))&&(2*N<=n*(n+1))) //求出n的值,即在第几斜行
break;
}
if(n%2==0) //为偶数,向下
{
int a=n*(n-1)/2;
int b=N-a-1;
cout<<(1+b)<<'/'<<(n-b)<<endl;
}
else //为奇数,向上
{
int a=n*(n-1)/2;
int b=N-a-1;
cout<<(n-b)<<'/'<<(1+b)<<endl;
}
return 0;
}