【蓝桥杯真题】蓝桥杯真题之旋转
发布时间
阅读量:
阅读量
欢迎点击「算法与编程之美」↑关注我们!
本文首次发布于微信公众号:"算法与编程之美",请订阅以获取最新更新
问题描述
图像的旋转是一种最基本的操作方式,在本问题中要求将图像以顺时针方向旋转90度进行处理。为了方便表示一张图像的数据结构特征,则采用n×m的二维数组形式对其进行建模描述。举例说明使用n×m结构的情况时,请考虑3×4的具体实例进行分析。
1 3 5 7
9 8 7 6
3 5 9 7
这个图片顺时针旋转 90 度后的图片如下:
3 9 1
5 8 3
9 7 5
7 6 7
给定初始图片,请计算旋转后的图片。
【输入格式】
第一行为两个整数值n和m, 分别代表行数和列数. 以下的n行为输入数据, 每一行包含m个整数值, 组成一张图片的数据. 其中每个元素(即像素点)的值都是介于0到255之间的整数, 并且包括0和255.
【输出格式】
输出 m 行 n 列,表示旋转后的图片。
试题F: 旋转 7
第十届蓝桥杯大赛软件类省赛 Java 大学 C 组。
【样例输入】3 4
1 3 5 7
9 8 7 6
3 5 9 7
【样例输出】3 9 1
5 8 3
9 7 5
7 6 7
解决方案
最初想到的方法是使用二维数组来进行处理该问题。然而由于这是一道蓝桥杯真题的原因,则无法依赖外置库如numpy来进行直接求解。于是选择了列表结构作为解决方案的基础。深入分析题目后发现,在旋转变换的目标设定下(即目标设定是将原始图形进行顺时针方向90度的旋转),通过观察可以得出这样的结论:在旋转后的结果中每一个原始数据的位置都会对应到新的位置上。这样就可以通过双重循环结构高效地完成该任务。
代码示例:
| n,m = map(int,input().split()) lis = [] for i in range(n): num = list(map(int,input().split())) lis.append(num) new_lis = [] for a in range(m): new_num = [] for b in lis[::-1]: new_num.append(b[a]) new_lis.append(new_num) for x in new_lis: for y in x: print(y,end=' ') print('') |
|---|
运行效果:

图 1 实际运行效果
全部评论 (0)
还没有任何评论哟~
