測試點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.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 = '')
1050 螺旋矩陣 25
1050.螺旋矩陣 25 本題要求將給定的n個正整數按非遞增的順序,填入 螺旋矩陣 所謂 螺旋矩陣 是指從左上角第1個格仔開始,按順時針螺旋方向填充。要求矩陣的規模為m行n列,滿足條件 m n等於n m n 且m n取所有可能值中的最小值。輸入格式 輸入在第1行中給出乙個正整數n,第2行給出n個待填...
1050 螺旋矩陣 25分
本題要求將給定的 n 個正整數按非遞增的順序,填入 螺旋矩陣 所謂 螺旋矩陣 是指從左上角第 1 個格仔開始,按順時針螺旋方向填充。要求矩陣的規模為 m 行 n 列,滿足條件 m n 等於 n m n 且 m n 取所有可能值中的最小值。輸入格式 輸入在第 1 行中給出乙個正整數 n,第 2 行給出...
PAT乙 1050 螺旋矩陣 25
題目描述 本題要求將給定的n個正整數按非遞增的順序,填入 螺旋矩陣 所謂 螺旋矩陣 是指從左上角第1個格仔開始,按順時針螺旋方向填充。要求矩陣的規模為m行n列,滿足條件 m n等於n m n 且m n取所有可能值中的最小值。程式 include include include using names...