蓝桥杯回形取数

本文最后更新于:2023年1月5日 晚上

问题描述

  回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。

输入格式

  输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。

输出格式

  输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。

我的解法

# 获取m,n
m, n = map(int, input().split())

# 获取数组
arr = []
for i in range(m):
    arr.append(list(map(int, input().split())))

# 存放结果
res = []

while len(arr) > 0 or arr[0] != []:

    # 最左列向下
    for i in range(len(arr)):
        res.append(arr[i].pop(0))

    if len(arr) == 0 or arr[0] == []:
        break

    # 最下行向右
    for i in range(len(arr[0])):
        res.append(arr[len(arr) - 1][i])

    arr.pop(len(arr) - 1)

    if len(arr) == 0 or arr[0] == []:
        break

    # 最右列向上
    for i in range(len(arr)):
        res.append(arr[len(arr) - 1 - i].pop(len(arr[0]) - 1))

    if len(arr) == 0 or arr[0] == []:
        break

    # 最上行向左
    for i in range(len(arr[0])):
        res.append(arr[0][len(arr[0]) - 1 - i])

    arr.pop(0)

# 输出结果
for i in res:
    print(i, end=" ")

蓝桥杯回形取数
https://yorick-ryu.github.io/数据结构/蓝桥杯回形取数/
作者
Yorick
发布于
2023年1月1日
许可协议