2012-08-24 09:03:12Morris
[ZJ][Math] a348. 1. 貪食蛇
內容 :
問題敘述
貪食蛇遊戲中,若貪食蛇不被玩家控制蛇行方向時,其預設行進方向如下圖:
一開始貪食蛇的頭在 (1,1) 這個位置,第二秒跑到 (1,2),接著 (2,2)、(2,1)、(3,1)、(3,2)、…,到第十秒時貪食蛇的頭在 (1,4) 位置上,以此類推。請寫一個程式,計算貪食蛇依照上述行進模式的位置。
輸入說明
:
輸入包含了l+1列 (1 ≤ l ≤ 50),前l列中每一列有一個正整數Ni (1 ≤ Ni ≤ 2×109),代表l個貪食蛇行進的秒數,最後一列以0代表輸入結束。
輸出說明
:
對於輸入的每一個秒數,請輸出二個正整數,分別代表此時間點貪食蛇頭位置的橫座標與縱座標。
範例輸入 :
輸入範例一 8 20 25 0 輸入範例二 1 0
範例輸出 :
輸出範例一 2 3 5 4 1 5 輸出範例二 1 1
提示
:
出處
:
100三重考區資訊學科能力競賽
(管理:pcshic)
奇偶數分開討論即可
#include <stdio.h>
int main() {
int m, i;
while(scanf("%d", &m) == 1 && m) {
for(i = 0; ; i++)
if(i*i >= m)
break;
int n = i-1;
if(n&1) {
if(m - n*n <= n+1)
printf("%d %d\n", m - n*n, n+1);
else
printf("%d %d\n", n+1, 2*n + 2 - m + n*n);
} else {
if(m - n*n <= n+1)
printf("%d %d\n", n+1, m - n*n);
else
printf("%d %d\n", 2*n + 2 - m + n*n, n+1);
}
}
return 0;
}
奇偶數分開討論即可
#include <stdio.h>
int main() {
int m, i;
while(scanf("%d", &m) == 1 && m) {
for(i = 0; ; i++)
if(i*i >= m)
break;
int n = i-1;
if(n&1) {
if(m - n*n <= n+1)
printf("%d %d\n", m - n*n, n+1);
else
printf("%d %d\n", n+1, 2*n + 2 - m + n*n);
} else {
if(m - n*n <= n+1)
printf("%d %d\n", n+1, m - n*n);
else
printf("%d %d\n", 2*n + 2 - m + n*n, n+1);
}
}
return 0;
}