2010年4月25日 星期日

Problem 10161 Ant on a Chessboard,有著螞蟻的棋盤

以下圖方便講解我解題的方法:
首先,輸入一個值 N 後,先找出 N 在哪一個平方區內,也就是說,10 ~ 16 在 4 平方區,17 ~ 25 在 5 平方區。觀察上圖,10 ~ 16 其中有一個座標為 4,17 ~ 25 其中有一個座標為 5,再求出平方區內「紅色三角形」的數值,就可以很方便的求出座標了。用以下 C 語言程式碼可以找出 N 在哪一個平方區內:
int sqrtN = (int)ceil(sqrt((double)N));
再用以下 C 語言程式碼可以找出此平方區內「紅色三角形」的數值:
int mid = sqrtN * sqrtN - sqrtN + 1;
然後,判斷 N 是不是就是等於 mid ,如果是,座標就是 sqrtN, sqrtN;如果 N > mid,則需再判斷 sqrtN 是否為奇數或偶數,因為在上圖顯示,奇數是由下而上再由右至左,偶數則為由左而右再由上至下,所以當它是奇數時,則座標為sqrtN - (N - mid), sqrtN,而為偶數座標是 sqrtN, sqrtN - (N - mid);如果 N < mid, sqrtN 是奇數的座標為 sqrtN, sqrtN - (mid - N),sqrtN 是偶數的座標為 sqrtN - (mid - N), sqrtN。

By David.K

p10161題目連結
回ACM題庫目錄
回首頁

沒有留言: