Advertisement

【蓝桥杯真题】蓝桥杯真题之旋转

阅读量:

欢迎点击「算法与编程之美」↑关注我们!

本文首次发布于微信公众号:"算法与编程之美",请订阅以获取最新更新

问题描述

图像的旋转是一种最基本的操作方式,在本问题中要求将图像以顺时针方向旋转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)

还没有任何评论哟~