原题链接:蓝桥杯基础练习VIP-回形取数
解题思路:回形打印分解:下->右->上->左,如此循环往复,需要有四种坐标变换的逻辑,
坐标变换->二维数组->找到行列与数组中数的索引的函数
每打印一行或一列,就减少一次行或列的上限或增加一次下限,当下限超过上限时即打印结束
注意事项:
参考代码:
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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复