原题链接:蓝桥杯基础练习VIP-回形取数
解题思路:设置了h_u, h_d, v_l, v_r 四个参数,分别代表水平上边,水平下边,垂直左边,垂直右边
当遍历垂直左边的时候,起始位置为h_u,结束位置为n - h_d
当遍历水平下边的时候,起始位置为v_l,结束位置为m - v_r
当遍历垂直右边的时候,起始位置为h_d,结束位置为n - h_u
当遍历水平上边的时候,起始位置为v_r,结束位置为m - v_l
依次遍历即可输出全部
【详情请看下代码】
注意事项:代码很简陋,没考虑到的地方很多,请见谅,代码能力目前很差
参考代码:
n, m = map(int, input().split()) M = [] for _ in range(n): a = list(map(int, input().split())) M.append(a) total = n * m cnt = 0 flag = 0 h_u, h_d, v_l, v_r = 0, 0, 0, 0 while cnt != total: if flag % 4 == 0: for i in range(h_u, n - h_d): # 遍历不同行的同一列 print(M[i][v_l], end=' ') cnt += 1 v_l += 1 flag += 1 elif flag % 4 == 1: for j in range(v_l, m - v_r): print(M[n - h_d - 1][j], end=' ') cnt += 1 h_d += 1 flag += 1 elif flag % 4 == 2: for k in range(h_d, n - h_u): print(M[n - k - 1][m - v_r - 1], end=' ') cnt += 1 v_r += 1 flag += 1 elif flag % 4 == 3: for l in range(v_r, m - v_l): print(M[h_u][m - l - 1], end=' ') cnt += 1 h_u += 1 flag += 1
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复