网上解法确实不少:找规律、奇偶项、巴拉巴拉、也有跟我思路差不多但是我看不懂的一种
最后还是看了一个写c的老哥的视频才看懂了 缩一行(一列),究竟是什么意思
还有自己堆range(x,y,z) #z为负 x-z,直到y
理解的不够明白,之后要多谢几遍
4x4:
正序的
range(0,3) 只能取到0,1,2 。想取到3,就要range(3+1)
逆序的
想取到3到0的话,range(3,0,-1)是不可以的,要写成range(3,0-1,-1)
"""
逆时针
"""
m, n = map(int, input().split()) #m行,n列
nums = []
for i in range(m):
nums.append(input().split())
a=[]
left,right=0,n-1
up,down=0,m-1
while(True):
for i in range(up,down+1):a.append(nums[i][left])
left+=1
# x+=1 在for的外围
if left>right:break
for i in range(left,right+1):a.append(nums[down][i])
down-=1
if down<up:break
for i in range(down,up-1,-1):a.append(nums[i][right])
right-=1
if right<left:break
for i in range(right,left-1,-1):a.append(nums[up][i])
up+=1
for x in a:
print(x,'',end='')
闲来无事,勾栏听曲
来个顺时针
"""
顺时针
"""
m, n = map(int, input().split()) #m行,n列
nums = []
for i in range(m):
nums.append(input().split())
a=[]
left,right=0,n-1
up,down=0,m-1
while(True):
#假设输入3 3 也就是right=2 range(0,2) 00 01 02
#虽然知道left=0,但还是要写上,因为缩小圈中left会变范围
for i in range(left,right+1):a.append(nums[up][i])#为什么right+1?
up+=1
if up>down:break
#此时up=1 right=2 range(1,2) 取不到2,所以+1
for i in range(up,down+1):a.append(nums[i][right])
right-=1
if right<left:break
for i in range(right,left-1,-1):a.append(nums[down][i])
down-=1
if down<up:break
#到达不了up-1,只到up 与上面不同,此时的down是起,
for i in range(down,up-1,-1):a.append(nums[i][left])
left+=1
if left>right:break
for x in a:
print(x,'',end='')