给你两个整数 n,m,请你构造一个 n 行 m 列的蛇形方阵,在这个方阵中,数字由 1 到 n×m,从最右上角开始,呈环状(逆时针)向内填充,例如 n=3,m=3 的时候,蛇形方阵如下: 3 2 1 4 9 8 5 6 7 输入格式 第一行包含两个整数 n,m。 输出格式 一共 n 行,每行 m 个整数,表示对应的蛇形方阵,同一行的相邻两个数之间用一个空格分隔。 样例输入 4 6 样例输出 6 5 4 3 2 1 7 20 19 18 17 16 8 21 22 23 24 15 9 10 1
时间: 2024-01-06 18:03:16 浏览: 195
队列(假设n个人编号1..n,他们按编号顺时针站成一圈)如n=5,m=3。1 2 3 4 5,最终输出是3 1 5 2 4。
5星 · 资源好评率100%
这是一道蛇形矩阵的问题,可以使用模拟的方法进行求解。
具体思路如下:
1. 定义一个二维数组,用于存储蛇形方阵。
2. 定义两个变量 i 和 j,表示当前要填充的位置。
3. 从最右上角开始,按照逆时针方向填充数字,每填充一个数字,就将 i 和 j 更新为下一个要填充的位置。
4. 如果下一个要填充的位置已经被填充过了,就将 i 和 j 更新为下一个要填充的位置。
5. 重复步骤 3 和 4,直到填充完所有的数字。
下面是 Python 代码实现:
```python
n, m = map(int, input().split())
# 定义二维数组
res = [[0] * m for _ in range(n)]
# 定义方向数组
dx, dy = [-1, 0, 1, 0], [0, 1, 0, -1]
# 定义起始位置和方向
x, y, d = 0, m - 1, 0
# 从最右上角开始,逆时针方向填充数字
for i in range(1, n * m + 1):
res[x][y] = i
nx, ny = x + dx[d], y + dy[d]
if nx < 0 or nx >= n or ny < 0 or ny >= m or res[nx][ny] != 0:
d = (d + 1) % 4
nx, ny = x + dx[d], y + dy[d]
x, y = nx, ny
# 输出结果
for i in range(n):
print(' '.join(str(x) for x in res[i]))
```
输入样例:
```
4 6
```
输出样例:
```
6 5 4 3 2 1
7 20 19 18 17 16
8 21 22 23 24 15
9 10 11 12 13 14
```
阅读全文