题目描述
问题描述:

中山市迎接2010年亚运会活动将要在兴中体育场举行,市教育局为每个学校安排了一个区域,每个学校的同学都要坐在自己学校的区域内。

分给成功小学的区域是个等边三角型,这不是不重视成功小学,而是把难题给了成功小学,就是因为成功小学的同学更加优秀,因此这点小问题是难不倒他们的。大家根据座位区域,一下就设计出了以下座位安排方案:

1

2 3

4 5 6

7 8 9 10

11 12 13 14 15

……

我们可以看出,1号同学应该坐第一排的第一个,它的座标是(1,1)。而8号同学在第四排的第二个,它的座标是(4,2)。

现在的问题是,我们怎么样才能知道任意一个同学到底坐在哪个座位上(即这个座位的座标)呢?

我想,这个问题可难不倒你,你能编写一个程序帮助成功小学的同学解决这个问题吗?

输入
输入格式:

输入一个整数N(1<=N<=32767),表示第N个同学。

输出
输出格式:

输出两个整数i,j,中间用一个空格隔开,表示第N个同学的座位在第i行的第j个位置。

样例输入
5
样例输出
3 2

思路:算出递推公式f(n) = f(n-1)+1,算出所有结果,然后从结果集中遍历。

 class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int x = 1;
        int y = 1;
        int count = 0;
        int[] f = new int[32768];
        f[0] = 1;
        f[1] = 2;
        if (n >= 2) {
            for (int i = 2; i <= n; i++) {
                f[i] = f[i - 1] + 1;
            }
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < f[i]; j++) {
                    count++;
                    if (count == n) break;
                    y++;
                }
                if (count == n) break;
                x++;
                y = 1;
            }
            System.out.println(x + " " + y);
        } else {
            System.out.println(x + " " + y);
        }
    }
}