解题思路:设置了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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论