题目描述
现代数学的著名证明之一是 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(1≤N≤10的7次方)。
输出格式
表中的第 N 项。
输入输出样例
输入 #1
7
输出 #1
1/4
思路:
-
首先考虑z字形排列每一项对应的编号。第一项是 1/1,然后是 1/2,2/1,3/1,2/2,…
-
n表示输入的需要查找的编号;i表示行号;k表示前i行的个数。
-
比较n与k的大小;
- 如果n>k;说明所查找的项与k不在同一行;这时需要i++;循环直到n<=k
- n与k处于同一行为止,就跳出循环
-
考虑输出时
- 观察行号i为奇数时,同一行的顺序是分子增大,分母减小
- 行号i为偶数时,同一行的顺序是分子减小,分母增大
- 并且分子加分母之和=i+1
- 所以可以利用i%2表示行号对应的奇偶性
-
找到i,n,k之间的关系,表达出所要的输出方式
package p1014;
import java.util.Scanner;
public class p1014 {
public static void main(String []args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int k=0;
int i=1;
for(i=1;;i=i+1)
{
k=k+i;
if(n>k)
{
}
else
break;
}
if(i%2==0)
{
System.out.println((i-k+n)+"/"+(k-n+1));
}
else
{
System.out.println((k-n+1)+"/"+(i-k+n));
}
}
}