问题链接:CCF NOI1049 旋转图像。
时间限制:
1000 ms 空间限制: 262144 KB
题目描述
输入一个n行m列的黑白图像,将它顺时针旋转90度后输出。
输入
第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1 <= n <= 100,1 <= m <= 100。
接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0~255之间。
输出
m行,每行n个整数,为顺时针旋转90度后的图像。相邻两个整数之间用单个空格隔开。
样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
7 4 1
8 5 2
9 6 3
数据范围限制
1 <= n <= 100,1 <= m <= 100。
问题分析
这是一个矩阵旋转问题,在程序中就是一个二维数组的值旋转输出问题。
关键是下标的映射关系,找到这种映射关系,程序就简单了。
程序说明
(略)
- 先定义一个符号常量,再用它来定义二维数组,可以使得程序的通用性得到提高。
- 二维数组下标的映射关系。
参考链接:CCF201503-1 图像旋转(100分)。
100分通过的C语言程序:
#include <stdio.h> #define N 100 int a[N][N]; int main(void) { int n, m, i, j; scanf("%d%d", &n, &m); for(i=0; i<n; i++) for(j=0; j<m; j++) scanf("%d", &a[i][j]); for(j=0; j<m; j++) { for(i=0; i<n; i++) { if(i != 0) printf(" "); printf("%d", a[n - 1 - i][j]); } printf(" "); } return 0; }