如何用python输出下列打印方阵?

新手上路,请多包涵

输入n(0<n<=20), 输出如下方阵(如n=4时):

1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16

阅读 4.2k
2 个回答
import numpy as np


def num(i=[0]):
    i[0] += 1
    return i[0]


shu_ru = int(input("shu ru "))
a = np.zeros((shu_ru, shu_ru))
k = 1
all = []

while k < shu_ru * 2:
    lst = []
    for i in range(k):
        for j in range(k):
            if i + j == k - 1 and i < shu_ru and j < shu_ru:
                lst.append((i, j))
    if k % 2 == 0:
        lst.reverse()
    k += 1
    all.append(lst_p)

for i in all:
    for j in i:
        a[j] = num()

当a = 3,输出

Out[1]: 
array([[1., 3., 4.],
       [2., 5., 8.],
       [6., 7., 9.]])

当a = 4,输出

Out[2]: 
array([[ 1.,  3.,  4., 10.],
       [ 2.,  5.,  9., 11.],
       [ 6.,  8., 12., 15.],
       [ 7., 13., 14., 16.]])

当a = 1,输出

Out[2]: array([[1.]])

代码写的比较直白,没有优化,大概就是从下标跟你的输入值的关系着手分析。

n = 4
c = 1
s = [[0 for _ in range(n)] for i in range(n)]

# 左上三角
for i in range(n):
    for j in range(i+1):
        a, b = (i-j, j) if i%2 != 0 else (j, i-j)
        s[a][b] = c
        c += 1
# 右下三角        
for i in range(n, n*2):
    for j in range(1, n*2-i):
        a, b = (n-j, i-n+j) if i%2 != 0 else (i-n+j, n-j)
        s[a][b] = c
        c += 1
# 打印结果        
for i in s:
    print(i)

输出结果

[1, 3, 4, 10]
[2, 5, 9, 11]
[6, 8, 12, 15]
[7, 13, 14, 16]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题