一、問題的提出
n階Z形矩陣的特點是按照之(Z)字形的方式排列元素。n階Z形矩陣是指矩陣的大小為n×n,其中n為正整數。
題目描述
一個?n?行?n?列的螺旋(Z形)矩陣如圖1所示,觀察并找出填數規律。
圖1? 7行7列和8行8列的螺旋(Z形)矩陣
現在給出矩陣大小?n,請你輸出該矩陣。
輸入格式
輸入一個整數?n(1≤n≤1000),表示矩陣大小。
輸出格式
輸出?n?行?n?列,表示所求的矩陣。
輸入輸出樣例
二、解決的思路
圖2 矩陣生成原理圖
根據題目描述、樣例和圖2可知:矩陣為n×n,其中偶數行(第一行為0行)從左向右排列元素;奇數行(第一行為0行)從右向左排列元素。
三、矩陣生成算法
n行n列,偶數行(第一行為0行)從0~n-1生成元素;奇數行(第一行為0行)從n-1~0生成元素。
程序代碼如下:
N = 5
def prt(b):?????????????????????????? # 打印二維列表for i in range(N):for j in range(N):print("%3d" % b[i][j], end='')print()def Helix_MatrixII(n):cnt = 1for i in range(n):??????????????? # 生成n行if i % 2 == 0:?????????????? # 偶數行for j in range(n):?????? # 由左向右(j為0~n-1)生成matrix[i][j] = cntcnt += 1else:?????????????????? # 奇數行for j in range(n):?????? # 由右向左(j為n-1~0)生成matrix[i][n-1-j] = cntcnt += 1matrix = []?????????????????????????? # 初始化二維矩陣matrix(二維列表)
for i in range(N):matrix.append([])for j in range(N):matrix[i].append(0)
Helix_MatrixII(N)
prt(matrix)
執行結果:
1 | 2 | 3 | 4 | 5 |
10 | 9 | 8 | 7 | 6 |
11 | 12 | 13 | 14 | 15 |
20 | 19 | 18 | 17 | 16 |
21 | 22 | 23 | 24 | 25 |
四、題目求解算法
按題目要求:輸入矩陣大小?n,輸出該矩陣。
def prt(b):?????????????????????????? # 打印二維列表for i in range(N):for j in range(N):print("%3d" % b[i][j], end='')print()def Helix_MatrixII(n):cnt = 1for i in range(n):??????????????? # 生成n行if i % 2 == 0:?????????????? # 偶數行for j in range(n):?????? # 由左向右(0~n-1)生成matrix[i][j] = cntcnt += 1else:?????????????????? # 奇數行for j in range(n):?????? # 由左向右(n-1~0)生成matrix[i][n-1-j] = cntcnt += 1N = int(input())
matrix = []?????????????????????????? # 初始化二維矩陣matrix(二維列表)
for i in range(N):matrix.append([])for j in range(N):matrix[i].append(0)
Helix_MatrixII(N)
prt(matrix)
輸入8,輸出為