输入一个n行m列的图像,将它顺时针旋转90度后输出
第一行输入两个数
分别代表行和列第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1≤n≤100,1≤m≤100。
接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0∼255之间。
样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
7 4 1
8 5 2
9 6 3
这题我们根据它的输入和输出位置的不同来找规律
例如输入的7的位置是(2,0),而输出的7的位置是(0,0)
输入的8的位置是(2,1),而输出的8的位置是(1,0)
以此类推,我们就可以知道旋转90度的本质是将先输出最后一排的第一个,然后从下往上输出这个数的一列,然后再最后一排的第二个,从下往上输出该一列,剩下的以此类推。值得注意的是要求相邻两个整数之间用单个空格隔开,所以每到一列的最后一个输出换行。
以下是源程序
#include<stdio.h>
int main()
{
int n,m;
scanf("%d %d",&n,&m);
int i,j;
int arr[n][m];
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&arr[i][j]);
}
}
/*注意这里的i,j是针对原来输入而言的*/
/*一列一列的输出,是正序,因此列是递加*/
for(j=0;j<m;j++)
{
/*注意是同一列倒着输出,所以行是递减*/
for(i=n-1;i>=0;i--)
{
printf("%d ",arr[i][j]);
/*到一列最后一个时,输出换行*/
if(i==0)
{
printf("\n");
}
}
}
}