样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
1 4 7 8 9 6 3 2 5
样例输入
3 2
1 2
3 4
5 6
样例输出
1 3 5 6 4 2
做这个题几乎用了我一天时间,因为对python中的二维数组不太熟悉,用方法pop弹出列表中的列表中的元素的时候,会变成空列表,然后用while~remove循环将列表中的空列表删除。
我的代码
#回形取数
n,m=input().split()
n=int(n)
m=int(m)
arr=[]
for k in range(n):
arr.append(input().split())
s=[]
print(arr)
while True:
#向下
for k in range(len(arr)):
p=arr[k].pop(0)
s.append(p)
while [] in arr:
arr.remove([])
if len(arr)==0:
break
#向右
for k in range(len(arr[0])):
p=arr[-1].pop(0)
s.append(p)
while [] in arr:
arr.remove([])
if len(arr)==0:
break
#向上
for k in range(len(arr)):
p=arr[len(arr)-1-k].pop(-1)
s.append(p)
while [] in arr:
arr.remove([])
if len(arr)==0:
break
print(arr)
#向左
for k in range(len(arr[0])):
p=arr[0].pop()
s.append(p)
while [] in arr:
arr.remove([])
if len(arr)==0:
break
for i in s:
print(i.end=' ')
以下是标准答案
m, n = map(int, input().split())
row = col = count = 0
matrix = [[] for _ in range(m)]
for i in range(m):
arr = input().split()
for j in range(n):
matrix[i].append(int(arr[j]))
while count < m * n: # 总共m*n个数
while row < m and matrix[row][col] != -1: # 向下取数
print(matrix[row][col], end=' ')
matrix[row][col] = -1 # 将去过的位置置为-1
row += 1
count += 1
row -= 1 # 上个循环结束后row的值为m,需要减1,否则越界
col += 1 # 列值加1,因为第零列在上个循环已经输出,往右推一行
while col < n and matrix[row][col] != -1: # 向右取数
print(matrix[row][col], end=' ')
matrix[row][col] = -1 # 将去过的位置置为-1
col += 1
count += 1
row -= 1 # 往上推一行
col -= 1 # 上个循环使列值为n
while row >= 0 and matrix[row][col] != -1: # 向上取数
print(matrix[row][col], end=' ')
matrix[row][col] = -1 # 将去过的位置置为-1
row -= 1
count += 1
row += 1 # 上个循环使行值为-1
col -= 1 # 往左推一行
while col >= 0 and matrix[row][col] != -1: # 向左取数
print(matrix[row][col], end=' ')
matrix[row][col] = -1 # 将去过的位置置为-1
col -= 1
count += 1
col += 1 # 上个循环使列值为-1
row += 1 # 向下推一行
版权声明:本文为qq_45208848原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。