zoukankan      html  css  js  c++  java
  • 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 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

    题目要求给出给出N,求蚂蚁第N次爬到哪里,这个跟白书上的Canton数表题是如出一辄。。。找到数学规律,把它划分成8项加16项加24项。。即8K的一个等比数列,首先求出它在哪个区间,再从区间里按规则找出来。。表示做完后看了其他大神的题解,我表示自己找出的规律真的好挫。。。还写了2个小时才A掉。。。不过是1次A掉还是蛮爽的

    还有就是要注意细节。。。殷犇说的,注意细节。。

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int n;
        while (cin>>n&&n)
        {
          int s=1,k=1;
          int x,y;
          while (s<n)
          {
            s+=8*k;
            k++;
          }
          k--;
          int dis=s-n;
          int rec=dis/(4*k+1);
          if (rec)
          {
              if((dis-4*k)/(2*k))
              {
                x=2*k-(dis-6*k)%(2*k);
                y=2*k;
              }
              else
              {
                  x=2*k;
                  y=(dis-4*k)%(2*k);
              }
          }
           else
           {
               if (dis/(2*k+1))
               {
                   x=2*k+1;
                   y=2*k+1-(dis-2*k)%(2*k+1);
               }
               else
               {
                   y=2*k+1;
                   x=dis+1;
               }
           }
    
          cout<<x<<" "<<y<<endl;
    
        }
    
        return 0;
    }
  • 相关阅读:
    MVP项目目前已完成:
    MVP项目图:
    团队项目(MVP:新能源汽车无线充电管理网站)——个人任务
    结对项目:黄金点游戏(何珠&赵艳)
    软件工程作业个人项目: wc项目,统计文本文件的字符数、单词数和行数。
    软件工程个人项目:能自动生成小学四则运算题目的程序
    浏览完软件工程教材后,我的五个问题如下
    Async分析
    session
    XML技术
  • 原文地址:https://www.cnblogs.com/kkrisen/p/2878597.html
Copyright © 2011-2022 走看看