📅  最后修改于: 2023-12-03 15:37:14.711000             🧑  作者: Mango
这道题目要求我们编写一个Python程序,接受一个正整数n作为输入,然后输出一个n×n的方阵,其中每个元素都是从1开始不断递增的。该方阵以螺旋状的形式填充元素值。
我们可以首先创建空的 n×n 矩阵,然后我们需要定义四个变量: rmin、rmax、cmin 和 cmax,它们表示数组中当前要填充的行和列的范围。我们可以使用 while 循环迭代,每次迭代填充一圈元素。在螺旋的每个方向上,我们需要检查当前的行和列的范围。
具体算法如下:
def generateSpiralMatrix(n):
matrix = [[0] * n for i in range(n)]
num = 1
rmin, rmax, cmin, cmax = 0, n - 1, 0, n - 1
while num <= n * n:
# 填充从左往右的第一行
for c in range(cmin, cmax+1):
matrix[rmin][c] = num
num += 1
rmin += 1
# 填充从上往下的一列
for r in range(rmin, rmax+1):
matrix[r][cmax] = num
num += 1
cmax -= 1
if rmin <= rmax:
# 填充从右往左的一行
for c in range(cmax, cmin-1, -1):
matrix[rmax][c] = num
num += 1
rmax -= 1
if cmin <= cmax:
# 填充从下往上的一列
for r in range(rmax, rmin-1, -1):
matrix[r][cmin] = num
num += 1
cmin += 1
# 返回填充好的矩阵
return matrix
例如,当我们输入一个值为 4 的正整数时,程序应该输出如下的矩阵:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
我们可以使用以下代码进行测试:
matrix = generateSpiralMatrix(4)
for row in matrix:
print(' '.join([str(num).rjust(2) for num in row]))
输出结果应该为:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7