蓝桥杯回形取数
本文最后更新于: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/数据结构/蓝桥杯回形取数/