题目 1465: 蓝桥杯基础练习VIP-回形取数
时间限制: 1Sec 内存限制: 128MB 提交: 3682 解决: 1197
题目描述
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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
这个是重新反复改过之后的100%通过
m,n=map(int,input().split())
if(m<n):
xiao=m
else:
xiao=n
a=[]
for x in range(m):
a.append(list(map(int,input().split())))
down=0
up=n-1
right=m-1
left=0
if(xiao!=1):
for j in range(0,m):
print(a[j][0],end=" ")
for i in range(xiao//2+1):
for j in range(down+1,n-down):
print(a[right][j],end=" ")
right-=1
if(m%2!=0 and i==xiao//2):
break
for j in range(m-2-down,down-1,-1):
print(a[j][up],end=" ")
up-=1
if(n%2==0 and i==xiao//2-1 ):
break
for j in range(n-2-down,down,-1):
print(a[left][j],end=" ")
left+=1
for j in range(down+1,m-1-down):
print(a[j][down+1],end=" ")
down+=1
else:
if(m==1):
for i in range(n):
print(a[0][i],end=" ")
else:
for i in range(m):
print(a[i][0],end=" ")
真的改了好多遍啊,人都傻了,这题就先暂时告一段落吧!
这个是一开始自己想的,测试的时候只有3*3,4*4,5*5这种长的很端正的能通过,通过率是45%吧,而且很浪费时间。
m,n=map(int,input().split())
a=[]
for x in range(m):
a.append(list(map(int,input().split())))
down=0
up=n-1
right=m-1
left=0
for j in range(0,m):
print(a[j][0],end=" ")
if(n%2==0):
for i in range(n//2):
for j in range(down+1,n-1-down):
print(a[right][j],end=" ")
right-=1
for j in range(m-1-down,down,-1):
print(a[j][up],end=" ")
up-=1
for j in range(n-1-down,1+down,-1):
print(a[left][j],end=" ")
left+=1
for i in range(n//2-1):
for j in range(down,m-1-down):
print(a[j][down+1],end=" ")
down+=1
else:
for i in range(n//2):
for j in range(down+1,n-1-down):
print(a[right][j],end=" ")
right-=1
for j in range(m-1-down,down,-1):
print(a[j][up],end=" ")
up-=1
for j in range(n-1-down,1+down,-1):
print(a[left][j],end=" ")
left+=1
for j in range(down,m-1-down):
print(a[j][down+1],end=" ")
down+=1