UVA10161 Ant on a Chessboard【数学规律】

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)
在这里插入图片描述
   &nbspAt the 8-th second , she was at (2,3), and at 20-th second, she was at (5,4).
   &nbspYour 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;
}

猜你喜欢

转载自www.cnblogs.com/tigerisland45/p/10404408.html
ANT