zoukankan      html  css  js  c++  java
  • Uva 10161 Ant on a Chessboard

    Problem A.Ant on a Chessboard 

    Background

      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 left…in 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)

    25

    24

    23

    22

    21

    10

    11

    12

    13

    20

    9

    8

    7

    14

    19

    2

    3

    6

    15

    18

    1

    4

    5

    16

    17

    5

    4

    3

    2

    1

    1          2          3           4           5

    At the 8th second , she was at (2,3), and at 20th 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*10^9), 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

    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    
    int main()
    {
        int x, y, n, flag, m;
        while(scanf("%d", &n) == 1 && n)
        {
            m = (int)sqrt((double)n);
            if(m*m < n) m++;
            flag = n - (m*m-m+1);
            if(m%2 == 0)
            {
                
                if(flag>=0) 
                {
                    x = m; 
                    y = m - flag;
                }
                else 
                {
                    x = m + flag;
                    y = m;
                }
            }
            else 
            {
                if(flag>=0)
                {
                    x = m - flag;
                    y = m;
                }
                else
                {
                    x = m;
                    y = m + flag;
                }
            }
            printf("%d %d\n", x, y);
        }
        return 0;
    }

    解题思路:

    找规律,用线将数字按顺序圈出来再分析一下就简单了很多

    说实话, 一个月没碰题了,找条简单的水题YY希望能够允许吧?

  • 相关阅读:
    7.21 高博教育 数组 内存
    【基础扎实】Python操作Excel三模块
    PAT 甲级 1012 The Best Rank
    PAT 甲级 1011  World Cup Betting
    PAT 甲级 1010 Radix
    链式线性表——实验及提升训练
    循环程序设计能力自测
    链表应用能力自测
    PAT 甲级 1009 Product of Polynomials
    1008 Elevator (20分)
  • 原文地址:https://www.cnblogs.com/liaoguifa/p/2923986.html
Copyright © 2011-2022 走看看