本帖最後由 super_hkg 於 2019-7-29 15:19 編輯

base case 係
1
第2個case 係
1 2
3 4
第三個case 係
1 2 3
8   4
7 6 5

用個number allocate memory 整個2D array

2D array + 4 個loop 填哂D 格 再印出黎,左上角永遠係"1"黎,其實只係4個差唔多既loop ,係搵返果格麻煩D
要諗下總共要填幾多個number ,幾多個係吉既

print 完free 返D memory

= = =
其實有個唔使用array 既方法,只需要計返最大個數再慢慢一行一行print 就得

TOP

arr[0][0] = 1
arr[0][1] = 2
arr[0][2] = 3
arr[0][3] = 4

arr[1][3] = 5
arr[2][3] = 6

arr[3][3] = 7
arr[3][2] = 8
arr[3][1] = 9
arr[3][0] = 0

arr[2][0] = 1
arr[1][0] = 2
none_and_none 發表於 2019-7-28 18:43

可以見到array index係有pattern
然後就用四個loop順序去做上,右,下,左

點樣print個array出離,應該唔駛教啦掛

TOP

Group N: x = x_left+1
1 2 3 4

Group E: x = x_bottom+1
5
6

Group S: x = x_right-1
0 9 8 7

Group W: x = x_bottom+1
2
1

TOP

2個while loop,
1個做加
1個做減
順時針咁assign value落2d array到

TOP

2個while loop,
1個做加
1個做減
順時針咁assign value落2d array到
ckmakit 發表於 2019-7-29 17:37



    真心唔難, 似功課多唔會放答案出o黎
呢位CHING已經比o左好大HINTS

TOP

Um.. 其實好易, 俾個tips 你
max_number = (size -1) * 4
有呢個連array 都唔洗用..

TOP

Um.. 其實好易, 俾個tips 你
max_number = (size -1) * 4
有呢個連array 都唔洗用..
vichui 發表於 2019-7-29 22:46



路過睇到你呢個答案應該係最簡單正解

TOP

size=n; (i, j)=x where i, j=1 to n:

if i=1
    x=j %10;
else if i=n
    x=[(n-j+1) + n + (n-2)]%10;  // (3*n-j-1)%10
else if j=1
    x=[2*n + (n-2) + (n-i)]%10;  // (4*n-i-2)%10
else if j=n
    x=(n+i-1)%10;
else
   x=' ';

PS: % = Modulus

TOP

Python, 可以用 complex number 行一圈  
  1. def steps(size, dir = 1):
  2.     for _ in range(4):
  3.         for _ in range(size - 1): yield dir
  4.         dir *= -1j

  5. def square(size):
  6.     cmap = {}; idx = 0
  7.     for step in steps(size):
  8.         cmap[idx] = str((len(cmap) + 1) % 10)
  9.         idx += step
  10.     for j in range(size):
  11.         print ("".join([cmap.get(i-1j*j," ") for i in range(size)]))

  12. square(size=4)
複製代碼

TOP

回覆 19# headuck


   

TOP