若該數為x的平方數,那
一定是(1, x)或(x, 1),
看x是奇數或偶數。
若該數比平方數大,會有三種情況:
(1) 該數 - 平方數 == x + 1:
那就是在斜角(x + 1, x + 1)
(2) 該數 - 平方數 < x + 1:
(該數 - 平方數, n + 1)或(n + 1, 該數 - 平方數)
看x是奇數或偶數。
(3) 該數 - 平方數 > x + 1:
其中一個為n + 1,
另一個為n + 1 - [該數 - 平方數 - (n + 1)]
n + 1的意思是斜角。
算出與斜角的差值,再用此值與斜角相減。
(即從斜角的座標往前推)
化簡後為
2n + 2 - (該數 - 平方數)
/* ACM 10161 Ant on a Chessboard
* mythnc
* 2011/11/26 16:49:42
* run time: 0.004
*/
#include <stdio.h>
#include <math.h>
void output(int);
int main(void)
{
int x;
while (scanf("%d", &x) && x != 0)
output(x);
return 0;
}
/* output: output answer */
void output(int x)
{
int n, value;
if (x == 1) {
printf("1 1\n");
return;
}
n = sqrt(x);
/* if x is a square number */
if (n * n == x) {
if (n % 2 == 1)
printf("%d %d\n", 1, n);
else
printf("%d %d\n", n, 1);
return;
}
/* if x bigger than a square number n */
value = x - n * n;
if (value == n + 1)
printf("%d %d\n", n + 1, n + 1);
else if (value < n + 1)
if (n % 2 == 1)
printf("%d %d\n", value, n + 1);
else
printf("%d %d\n", n + 1, value);
else
if (n % 2 == 1)
printf("%d %d\n", n + 1, 2 * n - value + 2);
else
printf("%d %d\n", 2 * n - value + 2, n + 1);
}
沒有留言:
張貼留言