def matrix(n):
#生成 n*n 0矩陣
l = [[0 for i in range(n)] for j in range(n)]
#設定邊界條件
right = false
left = false
down = true
up = false
#設定邊界
boundright = n
boundleft = 0
boundbottom = n
boundtop = 0
num = 0
#記錄每次迴圈的座標
startofx = 0
startofy = n - 1
while num < n * n:
#從[0][3]開始向下走
if down:
for _ in range(startofx, boundbottom):
num += 1
l[_][startofy] = num
down = not down
left = not left
#走完一層將右邊的邊界減一
boundright -= 1
#設定下一次迴圈的起點位置
startofx = _
startofy -= 1
#到達底邊界時向左走
if left:
for _ in range(startofy, boundleft-1, -1):
num += 1
l[startofx][_] = num
left = not left
up = not up
#同樣走完一層後底邊界減一
boundbottom -= 1
#設定下一次迴圈的起點位置
startofy = _
startofx -= 1
#到達邊界後向上走
if up:
for _ in range(startofx, boundtop-1, -1):
num +=1
l[_][startofy] = num
right = not right
up = not up
#這裡走完之後左邊增加一層,所以左邊界加一
boundleft += 1
startofx = _
startofy += 1
#到達頂層向右走
if right:
for _ in range(startofy, boundright):
num += 1
l[startofx][_] = num
down = not down
right = not right
#同樣走完以後頂層增加一層,上邊界加一
boundtop += 1
startofy = _
startofx += 1
#列印矩陣
for i in range(n):
for j in range(n):
print(l[i][j], end=" ")
print()
matrix(5)
###########
13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5
matrix(4)
#############
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
C 實現蛇形矩陣
昨天做了一道關於蛇形矩陣的演算法題,覺得有點意思,下面記錄一下我實現的過程。我的做法是建立乙個動態二維陣列,然後一層一層往內填數字 如上圖,先是1 3,4 6,7 9,10 12。這是第一層,然後記錄層數,一層層迴圈即可。但是在我除錯的時候發現,如果是奇數行,最後中間那個數會沒有被賦值,所以在 最後...
華為機考,蛇形矩陣,python
思路 每行的數是有規律的,以n 4為例,第一行的第乙個數是1,第二數是1 2 3,第三個數是3 3 6,第四個數是6 4 10,總共加了n 1次分別是range 2,n 1 第二行的第乙個數是1 1 2,第二個數是2 3 5,第三個是5 4 9,總共加了n 2次,分別是range 3,n 1 第三行...
螺旋矩陣 蛇形矩陣
問題描述 給定乙個包含m行n列的m x n矩陣,程式設計按照螺旋順序,輸出該矩陣中的所有元素。輸入有多個矩陣。每個矩陣資料的第1行有兩個整數m和n,接著是乙個mxn矩陣的描述,有m行,每行有n個整數 輸出對每個矩陣資料,按照螺旋順序輸出矩陣陣列的元素。輸入樣例 3 31 2 3 4 5 6 7 8 ...