解题思路:回形打印分解:下->右->上->左,如此循环往复,需要有四种坐标变换的逻辑,
坐标变换->二维数组->找到行列与数组中数的索引的函数
每打印一行或一列,就减少一次行或列的上限或增加一次下限,当下限超过上限时即打印结束
注意事项:
参考代码:
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语言训练-排序问题<1> (C语言代码)浏览:1351 |
C二级辅导-等差数列 (C语言代码)浏览:1216 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:738 |
简单的a+b (C语言代码)浏览:760 |
C语言程序设计教程(第三版)课后习题9.1 (Java代码)浏览:471 |
WU-格式化数据输出 (C++代码)浏览:1212 |
【金明的预算方案】 (C++代码)浏览:940 |
哥德巴赫曾猜测 (C语言代码)浏览:2348 |
C语言训练-自由落体问题 (C语言代码)浏览:617 |
a+b浏览:433 |