测试点2与6没过
主要的点是:
(1)求得m与n,这个我是从1到一直到数的一半试的;
(2)构造螺旋矩阵,使用的是一圈一圈的方法,就是先把最外面的一圈填上,然后再填里面的一圈,对于最后可能剩下的单独一列,则是使用的列表是否为空来判断,因为我把排好序的元素从列表中一个个的弹出,然后放到矩阵中。
未完待续。。。
import math
#得到分解的质因数
def f(n):
n = int(n)
min = n
flag = 0
if n != 1:
for i in range(1 , n // 2 + 1):
if n % i == 0:
m = n // i
if abs(i - m) < min:
min = abs(i - m)
flag = i
else:
flag = 1
return flag, n // flag
num = input()
num = int(num)
list = input().split()
list_1 = []
for num_1 in list:
num_1 = int(num_1)
list_1.append(num_1)
list_1.sort()
list_1.reverse()
num_n, num_m = f(num)
#得到矩阵
a = [[0] * num_n for _ in range(num_m)]
length_1 = num_m
length_2 = num_n
length = num_m // 2
length = length // 2
i, j = 0, 0
while list_1:
#得到上边的一行
if list_1:
for k in range(length_2):
a[i][j] = list_1.pop(0)
j += 1
length_1 = length_1 - 2
j -= 1
#得到右边的一列
if list_1:
for k in range(length_1):
#print(list_1)
i += 1
a[i][j] = list_1.pop(0)
i += 1
#得到下面的一行
if list_1:
for k in range(length_2):
a[i][j] = list_1.pop(0)
j -= 1
j += 1
#得到左边的一列
if list_1:
for k in range(length_1):
i -= 1
a[i][j] = list_1.pop(0)
#去掉填好的行列数
j += 1
length_1 = num_m - 2
length_2 = num_n - 2
for i in range(num_m):
for j in range(num_n):
if j == num_n - 1:
print(a[i][j])
else:
print(str(a[i][j]) + ' ', end = '')