UVA10161 - 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

解答:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int main()
 4 {
 5     long n;
 6     while(scanf("%ld",&n)!=EOF)
 7     {
 8         if(n==0)
 9             break;
10         long s=0,i=1;
11         for(;;)
12         {
13             s+=i;
14             if(s>=n)
15             {
16                 if(s%2==1)
17                 {
18                     if(s-n>i/2)
19                         printf("%ld %ld\n",i/2+1,i+n-s);
20                     else
21                         printf("%ld %ld\n",s+1-n,i/2+1);
22                     break;
23                 }
24                 else
25                 {
26                     if(s-n>i/2)
27                         printf("%ld %ld\n",i+n-s,i/2+1);
28                     else
29                         printf("%ld %ld\n",i/2+1,s+1-n);
30                     break;
31                 }
32             }
33             i+=2;
34         }
35     }
36     return 0;
37 }

 

 

 

 

posted @ 2013-03-01 14:00  上白泽慧音  阅读(160)  评论(0编辑  收藏  举报