给定一个输入n,我想用n个数字打印n行,这样数字1到n 2就以一种锯齿的方式显示,从1开始出现在输出矩阵的右下角,2出现在最后一行...etc的末尾。
示例:
给定输入3。
印刷:
9 4 3
8 5 2
7 6 1给定输入1。
印刷:
1给定输入4。
印刷:
13 12 5 4
14 11 6 3
15 10 7 2
16 9 8 1尝试
n = int(input("Enter dimensions of matrix :"))
m = n
x = 1
columns = []
for row in range(n):
inner_column = []
for col in range(m):
inner_column.append(x)
x = x + 1
columns.append(inner_column)
for inner_column in columns:
print(' '.join(map(str, inner_column)))我尝试过这样的方法,但是它打印的数组不正确。有什么想法吗?
发布于 2022-11-20 07:41:02
代码在循环中显式执行x = 1,然后执行x = x + 1。由于您需要以相反的顺序排列第一列,并且有要输出的n*n编号,所以第一个左上角值应该是x = n * n,而在第一列中,它应该与x = x - 1一样减少。下一列应该从结束到开始填充,下一列应该从开始到结束填充,...etc。
我建议制作一个迭代器,以这种方式访问行: 0,1,2,.N- 1,然后n- 1,n- 2,. 0,从一开始就回来了。使用该迭代器,您可以确切地知道应该将下一个x值追加到哪一行:
# Helper function to generate row numbers in zig-zag order, for as
# long as needed.
def zigzag(n):
if n % 2:
yield from range(n)
while True:
yield from range(n - 1, -1, -1)
yield from range(n)
n = int(input("Enter dimensions of matrix :"))
matrix = [[] for _ in range(n)]
visit = zigzag(n)
for x in range(n*n, 0, -1):
matrix[next(visit)].append(x)然后打印出来:
for row in matrix:
print(' '.join(map(str, row)))https://stackoverflow.com/questions/74506321
复制相似问题