最近在学习Python,遇到了如下题目:
给定4应该输出如下形式的数据
01 12 11 10
02 13 16 09
03 14 15 08
04 05 06 07
给定5,应该输出如下形式的数据
01 16 15 14 13
02 17 24 23 12
03 18 25 22 11
04 19 20 21 10
05 06 07 08 09
观察上面的矩阵不难看出,数字总是从第一个开始成螺旋状排列指导最中心,我称它为“螺旋矩阵”
找关键点
根据上图可以发现如下规律:
(1)位于1号线的行索引与列索引之和为 n-1
(2)位于2号线的行索引等于列索引
(3)位于3号线的行索引等于列索引-1
于是可以如下编码:
#!/usr/bin/python3 """ 实现数字绕圈圈功能 """ SIZE = 7 # 创建一个长度为SIZE * SIZE的二维列表 array = [[0]*SIZE] for i in range(SIZE - 1): array += [[0] * SIZE] print(array) # orient代表绕圈的方向 # 0-向下,1-向右,2-向左,3-向上 orient = 0 # 控制1 - SIZE * SIZE的数值填入二维列表中 # 其中j控制行索引,k控制列索引 j = 0 k = 0 for i in range(1, SIZE * SIZE + 1): array[j][k] = i # 位于1号转弯线上 if j + k == SIZE - 1: # j>k,位于左下角 if j > k: orient = 1 # 位于右上角 else: orient = 2 # 位于2号转弯线上 elif (j == k) and (k >= SIZE / 2): orient = 3 # 位于三号转弯线上 elif (j == k - 1) and (k <= SIZE / 2): orient = 0 # 根据方向控制行索、引列索引的改变 # 如果方向为向下绕圈 if orient == 0: j += 1 # 如果是向右绕圈 elif orient == 1: k += 1 # 向上 elif orient == 3: j -= 1 # 向左 else: k -= 1 # 采用遍历输出上面的二维表 for i in range(SIZE): for j in range(SIZE): print('\t%02d' % array[i][j], end="") print("")