【题目描述】
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则向左旋转90度。一开始位于矩阵左上角,方向向下。
【输入格式】
输入第一行是两个不超过200的正整数m,n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
【输出格式】
输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分割,行末不要有多余的空格。
【样例输入】
3 3
1 2 3
4 5 6
7 8 9
【样例输出】
1 4 7 8 9 6 3 2 5
【运行代码】附解析
import math
a,b=map(int,input().split()) #a行b列
li=[]#用于存放输入的二维数组
ans=[]#用于存放输出的列表
for i in range(a):
li_1=list(map(int,input().split()))
li.append(li_1)
#确定圈数 圈数等于最小边长的一半加1
q=int(math.ceil(min(a,b)/2))
#遍历圈数
for i in range(q):
#首先往下遍历,从开头到结尾
for j in range(i,a-i):
a1=li[j][i]
ans.append(a1)
#往左遍历,从第二个元素到最后
for k in range(i+1,b-i):
a2=li[a-i-1][k]
ans.append(a2)
#往上遍历,倒序
for l in range(a-2-i,i-1,-1):
a3=li[l][b-1-i]
ans.append(a3)
#往右遍历,倒序
for k in range(b-2-i,i,-1):
a4=li[i][k]
ans.append(a4)
for e in ans:
print(e,end=' ')
【运行结果】
1 4 7 8 9 6 3 2 5