朋友们帮帮忙———用PASCAL语言证明Georg Cantor

来源:百度知道 编辑:UC知道 时间:2024/06/18 03:39:27
现代数学的著名证明之一是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、1/3、1/4、2/3……。编程输入项号N(1<=N<=1000000),输出表中第N项。
例:输入:N=7
输出:1/4

var i,j,k,n:longint;
begin
write(’N=’);readln(n);
k:=1;
while n>k do
begin
n:=n-k;
k:=k+1;
end;
if k mod 2=0 then writeln(n,’/’,k-n+1)
else writeln(k-n+1,’/’,n);
end.

1/1 1/2 1/3 1/4 1/5 1/6 1/7 1/8 1/9
2/1 2/2 2/3 2/4 2/5 2/6 2/7 2/8 2/9
3/1 3/2 3/3 3/4 3/5 3/6 3/7 3/8 3/9
4/1 4/2 4/3 4/4 4/5 4/6 4/7 4/8 4/9
5/1 5/2 5/3 5/4 5/5 5/6 5/7 5/8 5/9

将方阵看成以1/1为顶的一个三角形
1/1
2/1 1/2
3/1 2/2 1/3
4/1 3/2 2/3 1/4

cin>>N;
i=1;sum=0; //i为N所在行,sum是i行以前共多少个数
while(sum+i<N){sum+=i;i++;} //确定N在哪一行,原理即sum<N<sum+i
x=N-sum; //确定i在行中是第几个数
if i/2==i div 2 {a=1;b=i;step=1;}
else {a=i;b=1;step=-1;} //确定N所在行的查找顺序是↗还是↙;a,b分别是分子和分母,其实也就是原方阵中各数的坐标
while(x>1){a+=step;b-=step;x--;} //最终确定位置
cout<<a<<'/'<<b<<endl;<