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 first 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 first 25 seconds went like this:
( the numbers in the grids stands for the time when she went into the grids)
 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 file will contain several lines, and each line contains a number N (1 ≤ N ≤ 2 ∗ 109 ), which stands for the time. The file 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
问题链接:UVA10161 Ant on a Chessboard
问题简述:
将数字n放入矩形种,计算对于给定的n,矩形是几列几行?
问题分析:
这是一个数学规律题,关键在于对角线上的值,根据这个值也就知道了几行几列。
程序说明:(略)
参考链接:(略)
题记:(略)
AC的C++语言程序如下:
/* UVA10161 Ant on a Chessboard */
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, x, y, k, c;
while(cin>>n && n!=0)
{
k = ceil(sqrt(n)); // 向上取整
c = k * k - n; // 求坐标“差值”
if(k % 2) {
if(c < k)
x = 1 + c, y= k;
else
x = k, y = 2 * k - c - 1;
} else {
if(c < k)
x = k, y = 1 + c;
else
x = 2 * k - c - 1, y = k;
}
printf("%d %d\n", x, y);
}
return 0;
}