1050 螺旋矩陣 25

2021-08-11 14:10:28 字數 1757 閱讀 5824

測試點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...