如何实现从右下角开始蛇形打印1到N²的N×N矩阵?
解决蛇形矩阵(1在右下角)的实现思路
规律拆解
先看示例的数字填充逻辑:
- 数字从1开始,按列从右往左填充,每列填n个数字
- 从右数第1、3、5...列(奇数序号列):填充方向是从下到上(比如n=3的最右列,1在最后一行,2在倒数第二行,3在第一行)
- 从右数第2、4、6...列(偶数序号列):填充方向是从上到下(比如n=3的中间列,4在第一行,5在第二行,6在最后一行)
实现步骤
- 初始化一个n×n的空矩阵,所有元素先设为0
- 从数字1开始,按列从右到左遍历每一列
- 对每一列,根据它是从右数的奇数/偶数列,选择填充方向:
- 奇数序号列:从最后一行到第一行依次填入数字
- 偶数序号列:从第一行到最后一行依次填入数字
- 格式化输出矩阵,保证数字对齐(比如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
相关产品推荐
相关产品推荐

