• 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

    一道很简单的数学问题,给定一个棋盘和蚂蚁在上面爬行的规律,每次询问时间求蚂蚁的位置

    很容易由等差数列求和公式求出棋盘对角线上的数字从左下角到右上角为n^2+n+1,(n=0,1,2,……)

    由此可以确定所询问的数字在棋盘上的范围,进而可以算出坐标

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     long long t;
    10     while(scanf("%d",&t)&&t)
    11     {
    12         long long x,y;
    13         long long n=(sqrt(4*t-3)-1)/2;
    14         long long border=(n+1)*(n+1);
    15         if(n%2)
    16             if(t>border)
    17             {
    18                 x=n+2;
    19                 y=t-border;
    20             }
    21             else
    22             {
    23                 x=n+1;
    24                 y=border-t+1;
    25             }
    26         else
    27             if(t>border)
    28             {
    29                 y=n+2;
    30                 x=t-border;
    31             }
    32             else
    33             {
    34                 y=n+1;
    35                 x=border-t+1;
    36             }
    37         printf("%lld %lld
    ",x,y);
    38     }
    39 
    40     return 0;
    41 }
    [C++]
  • 相关阅读:
    ALinq Dynamic 使用指南——前言
    前端与后端分离的架构实例(三)
    前端与后端分离的架构实例(二)
    启动画面QSplashScreen鼠标点击的时候不退出
    Qt组件屏蔽鼠标激活
    Qt LNK2001错误
    QtDesigner中设定一个组件位于另一个组件上方
    QToolButton设置图片
    osgearth_package切片工具切局部影像或者高程tif无法生成切片问题;切完数据集无法显示问题
    Qt输入框添加搜索按钮,以及自动补全内容
  • 原文地址:https://www.cnblogs.com/lzj-0218/p/3505753.html
Copyright © 2020-2023  润新知