首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在1..N²矩阵中打印NxN,从右下角开始

在1..N²矩阵中打印NxN,从右下角开始
EN

Stack Overflow用户
提问于 2022-11-20 07:23:24
回答 1查看 35关注 0票数 -1

给定一个输入n,我想用n个数字打印n行,这样数字1到n 2就以一种锯齿的方式显示,从1开始出现在输出矩阵的右下角,2出现在最后一行...etc的末尾。

示例:

给定输入3。

印刷:

代码语言:javascript
复制
9 4 3
8 5 2
7 6 1

给定输入1。

印刷:

代码语言:javascript
复制
1

给定输入4。

印刷:

代码语言:javascript
复制
 13 12 5 4
 14 11 6 3
 15 10 7 2
 16 9 8 1

尝试

代码语言:javascript
复制
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)))

我尝试过这样的方法,但是它打印的数组不正确。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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值追加到哪一行:

代码语言:javascript
复制
# 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)

然后打印出来:

代码语言:javascript
复制
for row in matrix:
    print(' '.join(map(str, row)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74506321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档