解题思路:回形打印分解:下->右->上->左,如此循环往复,需要有四种坐标变换的逻辑,

              坐标变换->二维数组->找到行列与数组中数的索引的函数

              每打印一行或一列,就减少一次行或列的上限或增加一次下限,当下限超过上限时即打印结束
    
注意事项:

参考代码:

row, column = map(int, input().strip().split())
list1 = []

for i in range(row):
    list1.extend(list(map(int, input().strip().split())))

r, c = 0, 0  # 标记当前位置
pattern = 0  # 坐标变换模式
r_higher, r_lower, c_higher, c_lower = row - 1, 0, column - 1, 0

while r_higher >= r_lower and c_higher >= c_lower:
    if pattern == 0:#下
        while r 右->上->左
        c_lower += 1  # 列下限+1
        c += 1  # 列+1
        r -= 1  # 行多加了一次,减回去

    elif pattern == 1:#右
        while c 右->上->左
        r_higher -= 1
        r -= 1
        c -= 1

    elif pattern == 2:#上
        while r >= r_lower:
            print(list1[r * column + c], end = " ")
            r -= 1
        pattern = (pattern + 1) % 4  # 四种走向,下->右->上->左
        c_higher -= 1
        c -= 1
        r += 1

    elif pattern == 3:#左
        while c >= c_lower:
            print(list1[r * column + c], end = " ")
            c -= 1
        pattern = (pattern + 1) % 4  # 四种走向,下->右->上->左
        r_lower += 1
        r += 1
        c += 1


点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论