题解 | #蛇形矩阵#
蛇形矩阵
https://www.nowcoder.com/practice/649b210ef44446e3b1cd1be6fa4cab5e
#思路其实不难,就是数分里证明有理数是可列个的对角线排法。 #每次其实就是寻找二维矩阵中x,y坐标相加为0的(x,y)坐标对,相加为1的(x,y)坐标对……同时要求x>=y(先纵后横) import sys n = int(input()) m = int((n+1)*n/2) #计算出总共需要的数值个数m lst = list(range(1,m+1)) #初始化range(m)列表 res = [[0]*n for _ in range(n)] #初始化二维空列表,一定要这么写。如果写成[[0]*n]*n的话,赋值的时候会整列赋值,不是本意。 for i in range(n): #i取0到n-1,注意i是坐标的索引,最大是n-1 for j in range(i+1): #j取0到i。j是可以等于i的。 res[i-j][j] = lst.pop(0) #先纵向后横向排列数值,利用lst.pop返回去除值的特性 res = [[_ for _ in x if _!=0] for x in res] #把结果中各列表的0去掉,形成二维列表。 res = [' '.join([str(_) for _ in x]) for x in res] #把每行的元素用空格拼起来 print(*(res),sep='\n') #逐行打印并用回车分隔,print('\n'.join(res))亦可。