1050. 螺旋矩阵(25)

测试点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 = '')


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值