题目描述
问题描述:
中山市迎接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);
}
}
}