Test Message

e128: 新北100-1貪食蛇

內容

img1


輸入

輸入包含了 L+1 列(1<=L<=50),前 L 列中每一列有一個正整數 Ni(1<=Ni<=2*10^9),

代表 L 個貪蛇行進的秒數,最後一列以 0 代表輸入結束。

8
20
25
1
1000
10000000
0

輸出

對於輸入的每一個秒數,請輸出二個正整數,分別代表此時間點貪食蛇頭位置的橫座標與縱座標。

2 3
5 4
1 5
1 1
32 25
3163 1756


解題思路

將路線拆成兩部分

  1. 已經走完的正方形
  2. 正在走的 L 型

第一部分將總秒數開根號可以求得 (注意完全平方向的特舒情況)

第二部分在將總秒數減去上面正方形所需的秒數後判斷剩餘步驟是否大於前面正方形的邊長 + 1,如果是代表要轉彎,不是則不用。

最後定位到正確的位置輸出即可。


完整程式碼

AC (2ms, 140KB)
#include <stdio.h>
#include <math.h>

int main()
{
int n, sr, pos;
while (scanf(" %d", &n) == 1 && n)
{
sr = sqrt((double)n);
if (sr * sr == n)
sr--;
n -= sr * sr;
pos = sr + 1;
if (pos & 1)
{
if (n < pos)
printf("%d %d\n", pos, n);
else
printf("%d %d\n", (pos << 1) - n, pos);
}
else
{
if (n < pos)
printf("%d %d\n", n, pos);
else
printf("%d %d\n", pos, (pos << 1) - n);
}
}
return 0;
}