您的位置:首页 > 其它

UVA 10161 Ant on a Chessboard

2015-09-09 16:01 204 查看
yiyi : 先看对角线

你会发现对角线中的值和它的行数之间是有关系的,还有就是后面的数是围着1一圈一圈往外扩的。

我们输入N以后,再根据N的值的大小,从对角线上的数开始找,找的过程要跟据行的奇偶,需要分成不同的情况!

题目:

One day, an ant called Alice came to an M*M chessboard. She wanted to go around all the grids. So

she began to walk along the chessboard according to this way: (you can assume that her speed is one

grid per second)

At the rst second, Alice was standing at (1,1). Firstly she went up for a grid, then a grid to the

right, a grid downward. After that, she went a grid to the right, then two grids upward, and then two

grids to the leftin a word, the path was like a snake.

For example, her rst 25 seconds went like this:

( the numbers in the grids stands for the time when she went into the grids)

25 24 23 22 21 5

10 11 12 13 20 4

9 8 7 14 19 3

2 3 6 15 18 2

1 4 5 16 17 1

1 2 3 4 5

At the 8-th second , she was at (2,3), and at 20-th second, she was at (5,4).

Your task is to decide where she was at a given time (you can assume that M is large enough).

Input

Input le will contain several lines, and each line contains a number N (1  N  2  109), which stands

for the time. The le will be ended with a line that contains a number `0'.

Output

For each input situation you should print a line with two numbers (x,y), the column and the row

number, there must be only a space between them.

Sample Input

8

20

25

0

Sample Output

2 3

5 4

1 5

答案:

#include <stdio.h>
#include <iostream>

using namespace std;
int main () {
int n, x, y, i, m;

while (scanf("%d", &n) != EOF && n) {
m = 1;
i = 1;
do {
m = m + 2 * (i - 1);
if (m == n) {
x = i;
y = i;
break;
}
else if (n < m && n >= (m - i + 1)) {
if (i % 2 == 0) {
x = i - (m - n);
y = i;
}
else {
x = i;
y = i - (m - n);
}
break;
}
else if (n > m && n <= (m + i - 1)) {
if (i % 2 == 0) {
x = i;
y = i - (n - m);
}
else {
x = i - (n - m);
y = i ;
}
break;
}
i++;
}
while (1);
printf("%d %d\n", x, y);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: