A1040. Cantor表

问题描述

  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,然后是1/2,2/1,3/1,2/2...

  你的任务是求表中第N项的值。
输入格式
  输入仅一个正整数n(1<=n<=100000)
输出格式
  以分数形式输出表中的第n项(不用约分)
样例输入
7
样例输出
1/4
package www.tsinsen.com;

import java.util.Scanner;

public class A1040 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan=new Scanner(System.in);
        int n=scan.nextInt();
        //返回它是第几斜列
        int lie=find(n);
        //求在所在斜列的第几个
        int num=n-((lie)*(lie-1))/2;
        String str="";
        //如果是奇数行从下到上
        if(lie%2==1) {
            str=(lie-num+1)+"/"+num;
        }
        //如果是偶数行从上到下
        else if(lie%2==0) {
            str=num+"/"+(lie-num+1);
        }
        System.out.println(str);
    }
    public static int find(int n) {
        for(int i=1;i<n;i++) {
            if(i*(i+1)/2>=n) {
                return i;
            }
        }
        return n;
    }
}

 

posted @ 2018-02-07 15:11  henu小白  阅读(171)  评论(0编辑  收藏  举报