螺旋矩阵 python

 螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。

 题目描述

对于一个n行m列的表格,我们可以使用螺旋的方式给表格依次填上正整数。
例如,一个4行5列的螺旋矩阵如下:
1   2   3   4   5
14 15 16 17 6
13 20 19 18 7
12 11 10  9  8

输入描述

输入的第一行包含两个整数n,m ,分别表示螺旋矩阵的行数和列数。其中2≤n,m≤1000。

输出描述

打印输出该矩阵

实现思路

该题原理很简单,根据规律可以看出,矩阵的值是按照右->下->左->上的顺序进行递增,由此可以用列表和循环的方式实现。具体情形看代码注释。

代码实现

n, m = map(int, input().split())

# 创建二维数组
Map = [[0] * m for i in range(n)]

# 构造矩阵
# 初始坐标为(0,0),值为1
x, y = 0, 0
value = 1
Map[x][y] = value


# 判定循环结束条件,当value值等于n*m时循环结束
while value < n * m:
    # 先向右走 y变大
    # 需满足以下条件 1、不能越界   2、下一个坐标没有数字
    while y + 1 < m and Map[x][y + 1] == 0:
        y += 1
        value += 1
        Map[x][y] = value

    # 再向下走 x变大
    # 需满足以下条件 1、不能越界   2、下一个坐标没有数字
    while x + 1 < n and Map[x + 1][y] == 0:
        x += 1
        value += 1
        Map[x][y] = value

    # 再向左走 y变小
    # 需满足以下条件 1、不能越界   2、下一个坐标没有数字
    while y > 0 and Map[x][y - 1] == 0:
        y -= 1
        value += 1
        Map[x][y] = value

    # 再向上走 x变小
    # 需满足以下条件 1、不能越界   2、下一个坐标没有数字
    while x > 0 and Map[x - 1][y] == 0:
        x -= 1
        value += 1
        Map[x][y] = value

# 打印矩阵
for i in range(n):
    for j in range(m):
        print(Map[i][j], end=' ')
    print()

结果

 

附言

有的题目还要求输入两个整数r,c,打印螺旋矩阵第r行第c列的值。其中1≤r≤n,1≤c≤m。

代码实现:

n, m = map(int, input().split())
r, c = map(int, input().split())

Map = [[0] * m for i in range(n)]

# 模拟行进的过程
# 初始坐标为(0,0),值为1
x, y = 0, 0
value = 1
Map[x][y] = value

while value < n * m:
    # 先向右走 y变大
    # 需满足以下条件 1、不能越界   2、下一个坐标没有数字
    while y + 1 < m and Map[x][y + 1] == 0:
        y += 1
        value += 1
        Map[x][y] = value

    # 再向下走 x变大
    # 需满足以下条件 1、不能越界   2、下一个坐标没有数字
    while x + 1 < n and Map[x + 1][y] == 0:
        x += 1
        value += 1
        Map[x][y] = value

    # 再向左走 y变小
    # 需满足以下条件 1、不能越界   2、下一个坐标没有数字
    while y > 0 and Map[x][y - 1] == 0:
        y -= 1
        value += 1
        Map[x][y] = value

    # 再向上走 x变小
    # 需满足以下条件 1、不能越界   2、下一个坐标没有数字
    while x > 0 and Map[x - 1][y] == 0:
        x -= 1
        value += 1
        Map[x][y] = value


for i in range(n):
    for j in range(m):
        print(Map[i][j], end=' ')
    print()

# 注意,矩阵坐标从0开始,所以打印时要减一。
print(Map[r - 1][c - 1])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值