问题描述
旋转是图像处理的基本操作,在这个问题中,你需要将一个图像顺时针旋转90度。
计算机中的图像可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。例如,下面的矩阵(a)表示原始图像,矩阵(b)表示顺时针旋转90度后的图像。
输入说明
输入的第一行包含两个整数n和m,分别表示图像矩阵的行数和列数。1 ≤ n, m ≤ 100。
接下来n行,每行包含m个非负整数,表示输入的图像,整数之间用空格分隔。
输出说明
输出m行,每行n个整数,表示顺时针旋转90度之后的矩阵,元素之间用空格分隔。
输入样例
2 3
1 5 3
3 2 4
输出样例
3 1
2 5
4 3
#include<stdio.h>
int main()
{
int n,m;
scanf("%d %d",&n,&m);
int a[n][m];//n行 m列
int i1,j1,i2,j2;
for(i1=0;i1<n;i1++)//i表示行
{
for(j1=0;j1<m;j1++)//j表示列
{
scanf("%d",&a[i1][j1]);
}
}
//i1是a的行(n),j1是a的列(m)
//i2是b的行(m),j2是b的列(n)
int b[m][n];//m行 n列
for(i2=0;i2<m;i2++)
{
for(j2=0;j2<n;j2++)
{
b[i2][j2]=a[n-1-j2][i2];
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
printf("%d ",b[i][j]);
}
printf("\n");
}
return 0;
}
关键在于发现数组之间坐标的关系:
i1是a的行(n),j1是a的列(m) i2是b的行(m),j2是b的列(n)
发现i2=j1,i1+j2=n-1.这样以来核心就可以解决了