题目:给出一个n*m的整数矩阵,请你把这个矩阵顺时针旋转90度以后输出。
输入格式:第一行输入两个整数n,m中间用空格隔开,接下来n行每行m个整数 ,中间用空格隔开。
(1=<n<=200, 1=<m<=200,矩阵中的数都在int范围内)
输出格式:输出m行,每行n个整数中间用空格隔开。
样例输入1:
3 4
-1 3 6 3
7 7 9 1
10 3 4 6
样例输出2:
10 7 -1
3 7 3
4 9 6
6 1 3
代码如下:
#include<iostream>
using namespace std;
int arr[207][207];
int main( )
{
int n,m;
cin>> n >> m;
for(int a = 0; a < n; a++){
for(int b = 0; b < m; b++){
cin>>arr[a][b];
}
}
for(int a = 0; a < m; a++){
for(int b = n-1; b >=0 ; b--){
if(b == 0)
cout<<arr[b][a]<<endl;
else
cout<<arr[b][a]<<" ";
}
}
return 0;
}
- 分析题目,题目给出一个n*m的矩阵,那么提到了矩阵脑海里的第一反应是:二维数组。然后将矩阵以90度旋转后输出。可以参考一下题目给出的示例,也就是说我们可以选择两种方法。第一种将矩阵旋转好后存下来依次输出。第二种将矩阵不进行操作,直接根据规律将结果输出出来。
- 根据图示得出算法,如下:
矩阵的长和宽进行了调换,所有在在代码中就要考虑 n 和 m调换的问题。 - 矩阵的存储
int n,m;
cin>> n >> m;
for(int a = 0; a < n; a++){
for(int b = 0; b < m; b++){
cin>>arr[a][b];
}
}
-思路
首先矩阵的第一行第二行第三行变换后为矩阵的第三列第二列第一列,所以我们可以直接输出变换后的矩阵。
可以直接按列输出每一行的数据,也就是说以列为外层循环,行为内循环直接输出
for(int a = 0; a < m; a++){
for(int b = n - 1; b >= 0; b--){
if(b == 0)
cout<<arr[b][a]<<endl;
else
cout<<arr[b][a]<<" ";
}
}
```注意:如果按列输出那么内层循环应该从 n - 1 开始至 0 结束也就从最后一行开始至第一行结束。
(**每输出一组数据需要换行**)