1050 螺旋矩阵 (25 分) python

1050 螺旋矩阵 (25 分)

本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。

输入格式:

输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 10
4
,相邻数字以空格分隔。

输出格式:

输出螺旋矩阵。每行 n 个数字,共 m 行。相邻数字以 1 个空格分隔,行末不得有多余空格。

输入样例

12
37 76 20 98 76 42 53 95 60 81 58 93

输出样例

98 95 93
42 37 81
53 20 76
58 60 76

代码

import math

num = int(input())

figure = list(map(int, input().split()))
figure.sort(reverse=True)

shap_1 = int(math.sqrt(num))
while num % shap_1 != 0:
    shap_1 = shap_1 - 1
shap_2 = num // shap_1

up, left = 0, 0
right, down = shap_1, shap_2

result = [[0 for i in range(right)] for j in range(down)]
# print(result)

k = 0

while k <= num:
    for i in range(left, right):
        result[up][i] = figure[k]
        k += 1
    up += 1
    for j in range(up, down):
        result[j][right - 1] = figure[k]
        k += 1
    right -= 1
    if not k < num:
        break
    for m in range(right - 1, left - 1, -1):
        result[down - 1][m] = figure[k]
        k += 1
    down -= 1
    for n in range(down - 1, up - 1, -1):
        result[n][left] = figure[k]
        k += 1
    left += 1

for i in range(len(result)):
    print(" ".join(str(i) for i in result[i]))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值