代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:
我们以Z字形给上表的每一项编号。第一项是1/1,然后是1/2,2/1,3/1,2/2,…
输入描述:
整数N(1≤N≤10000000)
输出描述:
表中的第N项
示例1
输入
复制7
7
输出
复制1/4
1/4
/*原始状态
1/1 1/2 1/3 1/4 1/5
2/1 2/2 2/3 2/4 2/5
3/1 3/2 3/3 3/4 3/5
4/1 4/2 4/3 4/4 4/5
5/1
排序过后
1/1 1/2 2/1 3/1 2/2 1/3 1/4 2/3 3/2 4/1 4/2 3/3 2/4 1/5
1 2 3 4 5 6 7 8 9 10 11 12 13 14
规律如下
2=1+1 1/1 第一行,一个数字,1/1
3=1+2=2+1 1/2 2/1 第二行,两个数字,分子由1开始,分母由2开始
4=3+1=2+2=1+3 3/1 2/2 1/3 第三行,三个数字,分子由3开始,分母由1开始
5=1+4=2+3=3+2=4+1 1/4 2/3 3/2 4/1 第四行,四个数字,分子由1开始,分母由4开始
6=5+1=4+2=3+3=2+4=1+5 5/1 4/2 3/3 2/2 1/5 第五行, 五个数字,分子由5开始,分母由1开始由图可知,奇数行时分子由行数开始递减,分母由行数开始递增,偶数行反之,数字所在行数可用for循环判断n=n-i,当n<i+1时,代表是第i行*/ #include<stdio.h>
int main()
{int n, y=1, z, i;scanf("%d",&n);for(i=1;n>=i+1;i++){n=n-i;}z=i-1;if((z-1)%2!=0){for(int x=n;x>1;x--){i--;y++;}printf("%d/%d",i,y);}if((z-1)%2==0){for(int x=n;x>1;x--){i--;y++;}printf("%d/%d",y,i);}return 0; }