You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现从右下角开始蛇形打印1到N²的N×N矩阵?

解决蛇形矩阵(1在右下角)的实现思路

规律拆解

先看示例的数字填充逻辑:

  • 数字从1开始,按列从右往左填充,每列填n个数字
  • 从右数第1、3、5...列(奇数序号列):填充方向是从下到上(比如n=3的最右列,1在最后一行,2在倒数第二行,3在第一行)
  • 从右数第2、4、6...列(偶数序号列):填充方向是从上到下(比如n=3的中间列,4在第一行,5在第二行,6在最后一行)

实现步骤

  1. 初始化一个n×n的空矩阵,所有元素先设为0
  2. 从数字1开始,按列从右到左遍历每一列
  3. 对每一列,根据它是从右数的奇数/偶数列,选择填充方向:
    • 奇数序号列:从最后一行到第一行依次填入数字
    • 偶数序号列:从第一行到最后一行依次填入数字
  4. 格式化输出矩阵,保证数字对齐(比如n=4时数字占两位,n=3时占一位)

修正后的代码

n = int(input("Enter dimensions of matrix :"))
# 初始化n×n的空矩阵
matrix = [[0 for _ in range(n)] for _ in range(n)]
current_num = 1

# 从右往左遍历每一列
for col in range(n-1, -1, -1):
    # 计算当前列是从右数的第几个(比如n=4,最右列col=3是第1个)
    right_col_order = n - col
    if right_col_order % 2 == 1:
        # 奇数序号列:从下到上填充
        for row in range(n-1, -1, -1):
            matrix[row][col] = current_num
            current_num += 1
    else:
        # 偶数序号列:从上到下填充
        for row in range(n):
            matrix[row][col] = current_num
            current_num += 1

# 格式化输出,根据最大数字的位数调整宽度
max_width = len(str(n * n))
for row in matrix:
    print(' '.join(f"{num:{max_width}d}" for num in row))

代码验证

  • 输入1时,输出1
  • 输入3时,输出:
    9 4 3
    8 5 2
    7 6 1
    
  • 输入4时,输出:
    13 12  5  4
    14 11  6  3
    15 10  7  2
    16  9  8  1
    

(注:这里的对齐和示例完全一致,因为最大数字16是两位,所以所有数字按两位宽度右对齐)

内容的提问来源于stack exchange,提问作者rorocodes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:05:32