原题链接:蓝桥杯基础练习VIP-回形取数
参考代码:
def opt(i): global x,y,lst,step #这里需要注意一下,当到达每行或者每列的边界时,由于主程序中循环的边界问题未能将边界元素添加进去,所以放在函数中处理 lst.append(board[x][y]) step = step + 1 #定义四种操作,这四种操作其实就是连续左转九十度 if i%4==1: x, y = x, y + 1 elif i%4==2: x,y=x-1,y elif i%4==3: x,y=x,y-1 elif i%4==0: x,y=x+1,y while True: try: m,n=map(int,input().split()) board=[] for i in range(m): board.append(input().split()) lst=list() x,y=0,0#当前坐标 step=0#计步器 choice=1#操作选择器 du,dd,dl,dr=0,m-1,0,n-1#在四种操作轮替之间的边界定夺,可以如此理解:例如说,首先是竖直向下并入矩阵中的元素,当并入一列之后,这一列就相当于把原来的边界m*n变成了m*(n-1),这时dl也就是左边界会加一,du、dd、dl、dr分别对应的是上边界、下边界、右边界 while step!=n*m: if choice % 4 == 1: while x != dd: lst.append(board[x][y]) x = x + 1 step = step + 1 dl = dl + 1 opt(choice) choice += 1 elif choice % 4 == 2: while y != dr: lst.append(board[x][y]) y = y + 1 step = step + 1 dd = dd - 1 opt(choice) choice += 1 elif choice % 4 == 3: while x != du: lst.append(board[x][y]) x = x - 1 step = step + 1 dr = dr - 1 opt(choice) choice += 1 elif choice % 4 == 0: while y != dl: lst.append(board[x][y]) y = y - 1 step = step + 1 du = du + 1 opt(choice) choice += 1 for item in lst: print(int(item),end=' ') except: break
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复