现代数学的著名证明之一是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,…
输入描述 Input Description
整数N(1≤N≤10000000)
输出描述 Output Description
表中的第N项
样例输入 Sample Input
7
样例输出 Sample Output
1/4
数据范围及提示 Data Size & Hint
见描述
本题在wikioi的分类中属于模拟专题,啥叫模拟~~,就是把情境抽象成数据(不建模),同时把你手算的方法转化成计算机语言而形成程序的方法~~
本题如果没有计算机你怎么做?笔者说:“找规律!”
看题目中的Cantor表,看出什么了吗?
…………
所以我没法讲是不是啊,也只能告诉你规律,然后你看一下:哦,确实这么回事。就完了~~~笔者能力有限,表示无语~~
算法描述:
对于给定的n
若n为奇数,答案为 n/i+2-n
若n为偶数,答案为 i+2-n/n
其中i满足 (i*(i+1))div 2<n ((i+1)*(i+2))div 2>n(这里的i实际上是求已经填满了多少斜行)
不清楚的请看程序吧……
Program Cantor;
Var
n,i:longint;
Begin
readln(n);
i:=1;
while ((i*(i+1))div 2)<n do inc(i);
dec(i);
dec(n,((i*(i+1))div 2));
if not odd(i) then writeln(i+2-n,'/',n) else writeln(n,'/',i+2-n);
End.