题目
初始的代码
这道题初看题目我觉得没有什么难度,就是循环+判断嘛。但是等到自己上手了以后发现问题还是挺多的,上网上找到了几个现成的答案,但是感觉别人写的代码有点晦涩难懂,最后只看懂了下面这个“半成品”:
m,n = map(int,input().split())
ls = [[] for i in range(m)]
for i in range(m):
line = input().split()
for j in range(n):
ls[i].append(line[j])
for i in range(m):
print(ls[i][0],end=' ')
for j in range(1,n):
print(ls[m-1][j],end=' ')
for i in range(m-2,-1,-1):
print(ls[i][n-1],end=' ')
for j in range(n-2,0,-1):
print(ls[0][j],end=' ')
说是半成品,是因为这段代码只实现了绕矩阵最外层一圈取数,取一次就结束了,还远远达不到要求。
最后的代码
m,n = map(int,input().split())
#获得行列大小
if m<n:
min=m
else:
min=n
s=int(min/2+0.5)
#取最小边/2后四舍五入,得到的结果就是需要循环几圈,为什么是这样做可以自己思考几种情况
ls = [[] for i in range(m)]
for i in range(m):
line = input().split()
for j in range(n):
ls[i].append(line[j])
#录入矩阵
for k in range(s):
for i in range(m):
print(ls[i][0],end=' ')
for j in range(1,n):
print(ls[m-1][j],end=' ')
if m-2<0 or n-2<0:
break
#循环1次长宽各少2
#后面两次输出必须要判断是否还有必要进行,否则会重复输出,这在m不等于n的时候会有所体现
for i in range(m-2,-1,-1):
print(ls[i][n-1],end=' ')
for j in range(n-2,0,-1):
print(ls[0][j],end=' ')
m=m-2
n=n-2
ls2 = [[] for i in range(m)]
for i in range(m):
for j in range(n):
ls2[i].append(ls[i+1][j+1])
ls=ls2
#将ls裁剪掉已循环输出的部分,剩下的进入下一次循环