首先,輸入一個值 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題庫目錄
回首頁
沒有留言:
張貼留言