今天遇到的一份面試題,求高手指教
題目要求是寫一個函數,輸入一個數字n,然後函數就輸出一個n行n列的數陣,數陣樣式舉例如下:
n=3
-------------------
1 2 3
8 9 4
7 6 5
n=4
-------------------
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
n=5
-------------------
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
嗯,大致就是這麼著,繞著圈子排序
→→→→┐
┌→→┐↓
↑┌→↓↓
↑└←┘↓
└←←←┘
-------------------
有木有高手做出來? 0.0
------解決方案--------------------
PHP code
function Circle($n) { $k = $n % 2; $ar = array(); for($i=0; $i<$n; $i++) $ar[$i] = array_fill(0, $n, 0); $p = 1; $x = 0; $y = 0; $m = 0; $len = $n * $n; while($p < $len) { $x = $y = $m; while($x < $n) $ar[$y][$x++] = $p++; $x--; $y++; while($y < $n) $ar[$y++][$x] = $p++; $y--; $x--; while($x >= $m) $ar[$y][$x--] = $p++; $x++; $y--; $m++; while($y >= $m) $ar[$y--][$x] = $p++; $n--; } if($k) $ar[$y+1][$x+1] = $p; $r = ''; foreach($ar as $v) $r .= '| ' . join(' | ', $v) . ' |
'; return $r.'
'; }for($i=2;$i<30;$i++){ $html .= Circle( $i ); $html .=''; } ?>