试题来源为网络资源
试题编号: 201503-1 试题名称: 图像旋转 时间限制: 5.0s 内存限制: 256.0MB 问题描述: 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。 计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。 输入格式 输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数。 接下来n行每行包含m个整数,表示输入的图像。 输出格式 输出m行,每行包含n个整数,表示原始矩阵逆时针旋转90度后的矩阵。 样例输入 2 3 1 5 3 3 2 4 样例输出 3 4 5 2 1 3 评测用例规模与约定
1 ≤ n, m ≤ 1,000,矩阵中的数都是不超过1000的非负整数。
本题是简单题,根据题目我们可以得到该题的算法的设计思路:将一个矩阵进行逆转置。很简单相对矩阵的转置来说,逆转置就是按照逆时针旋转90度得到的矩阵。但是根据题意分析,我们没有必要再定义一个矩阵来存储逆转置之后的矩阵,只需要将原按照逆转置矩阵的存储格式输出即可。
源码:
//首先开辟一个数组,满足输入的最大规模int A[1001][1001];void main(void){ int n, m; int i, j; while (cin >> n >> m) { for (i = 0; i < n; ++i) { for (j = 0; j < m; ++j) cin >> A[i][j]; } for (i = m - 1; i >= 0; --i) { for (j = 0; j <= n - 2; ++j) cout << A[j][i] << ' '; //每行的最后一个数不需要加空格 cout << A[n - 1][i] << endl; } }}
PS:CCF试题类似于ACM竞赛试题,前两道一般都是简单题,很容易做出来。还有一定要注意算法的输出格式要满足题目的要求。