题目描述
旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转 90 度。
计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。
输入格式
输入的第一行包含两个整数 n,m,分别表示图像矩阵的行数和列数。
接下来 n 行每行包含 m 个整数,表示输入的图像。
输出格式
输出 m 行,每行包含 n 个整数,表示原始矩阵逆时针旋转 90 度后的矩阵。
数据范围
$1≤n,m≤1,000$
矩阵中的数都是不超过 1000 的非负整数。
输入样例:
2 3
1 5 3
3 2 4
输出样例:
3 4
5 2
1 3
思路
直接一列一列地输出就行了
我们拿输入样例作为例子,每个点的坐标如下↓
(1,1) (1,2) (1,3)
(2,1) (2,2) (2,3)
而输出的时候,坐标如下↓
(1,3)(2,3)
(1,2)(2,2)
(1,1)(2,1)
所以我们输入的时候,每行点的纵坐标不变,横坐标递增:
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%d",&q[i][j]);
}
}
而输出的时候,每行点的横坐标不变,纵坐标递增:
for(int i=m;i>0;i--)
{
for(int j=1;i<=n;i++)
{
printf("%d ",q[j][i]);//注意这里是q[j][i]
}
}
代码
#include<iostream>
#include<cstdio>
using namespace std;
int n,m;
int q[1010][1010];
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%d",&q[i][j]);
}
}
for(int i=m;i>0;i--)
{
for(int j=1;j<=n;j++)
{
printf("%d ",q[j][i]);
}
printf("\n");
}
return 0;
}