思路:
1、先按矩阵大小找到m和n
2、创建m*n矩阵,按顺时针向内
第一个循环向左坐标:[turns][turns if turns == 0 else turns-1]–>[turns][n-1-turns]
第二个循环向下坐标:[turns+1][n-1-turns]–>[m-1-turns][n-1-turns]
第三个循环向右坐标:[m-1-turns][n-2-turns]–>[m-1-turns][turns]
第四个循环向上坐标:[m-2-turns][turns]–>[turns+2][turns]
3、考虑特殊情况:如N = 1
代码中有测试点2,4,6猜测
N = int(input())
num = list(map(int, input().split(' ')))
if N == 1:#测试点4:N = 1
print(num[0])
else:
num.sort(reverse=True)
#获取m和n
mini = 10000
m = 0
n = 0
for i in range(1, int(pow(N, 1/2))+1):#测试点2和6:应该是方阵
if not (N / i) % 1 and mini > N / i - i:
mini = N / i - i
m = int(N / i)
n = i
mtx = [[0]*n for _ in range(m)]
turns = 0#圈数
cnt = 0
while 1:
for i in range(turns if turns == 0 else turns-1, n-turns):
mtx[turns][i] = num[cnt]
cnt = cnt + 1
for i in range(turns+1, m-turns):
mtx[i][n-1-turns] = num[cnt]
cnt = cnt + 1
for i in range(n-2-turns, turns-1, -1):
mtx[m-1-turns][i] = num[cnt]
cnt = cnt + 1
if cnt == N: break
for i in range(m-2-turns, turns+1, -1):
mtx[i][turns] = num[cnt]
cnt = cnt + 1
turns = turns + 1
for i in range(m):
for j in range(n):
print(mtx[i][j], end='\n' if j == n-1 else ' ')