题目
给出一个 <math> <semantics> <mrow> <mi> n </mi> <mo> × </mo> <mi> m </mi> </mrow> <annotation encoding="application/x-tex"> n\times m </annotation> </semantics> </math>n×m 的整数矩阵,请你把这个矩阵顺时针旋转 <math> <semantics> <mrow> <mn> 9 </mn> <msup> <mn> 0 </mn> <mi> o </mi> </msup> </mrow> <annotation encoding="application/x-tex"> 90^{o} </annotation> </semantics> </math>90o 以后输出。
输入格式
第一行输入两个整数 <math> <semantics> <mrow> <mi> n </mi> <mo separator="true"> , </mo> <mi> m </mi> <mo> ( </mo> <mn> 1 </mn> <mo> ≤ </mo> <mi> n </mi> <mo separator="true"> , </mo> <mi> m </mi> <mo> ≤ </mo> <mn> 200 </mn> <mo> ) </mo> </mrow> <annotation encoding="application/x-tex"> n,m(1 \le n, m\le 200) </annotation> </semantics> </math>n,m(1≤n,m≤200),用空格隔开。
接下来 <math> <semantics> <mrow> <mi> n </mi> </mrow> <annotation encoding="application/x-tex"> n </annotation> </semantics> </math>n 行,每行输入 <math> <semantics> <mrow> <mi> m </mi> </mrow> <annotation encoding="application/x-tex"> m </annotation> </semantics> </math>m 个整数,表示输入的矩阵。
矩阵中元素都是 int 范围内的整数。
输出格式
输入 <math> <semantics> <mrow> <mi> m </mi> </mrow> <annotation encoding="application/x-tex"> m </annotation> </semantics> </math>m 行,每行 <math> <semantics> <mrow> <mi> n </mi> </mrow> <annotation encoding="application/x-tex"> n </annotation> </semantics> </math>n 个空格隔开的整数,表示旋转以后的矩阵。
注意:每行末尾不能输出多余的空格。
样例输入
3 4
-1 3 6 3
7 7 9 1
10 3 4 6
样例输出
10 7 -1
3 7 3
4 9 6
6 1 3
题解
观察找规律:
原来的 -1 3 6 3 从 a[0][0]、a[0][1]、a[0][2]、a[0][3] 变成了之后的 a[0][n-1]、a[1][n-1]、a[2][n-1]、a[3][n-1],即横坐标变为纵坐标 n-1-横坐标 ,纵坐标变成了横坐标
我们再验证一组
-1 7 10,从 a[0][0]、a[1][0]、a[2][0],变成了之后的 a[n-1][0]、a[n-1][1]、a[n-1][2]
符合,ok
#include<iostream>
using namespace std;
const int N =200+5;
int main(){
int n,m;
int a[N][N];
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>a[i][j];
for(int i=0;i<m;i++) {
for(int j=n-1;j>=0;j--){
if(j!=n-1)
cout<<" ";
cout<<a[j][i];
}
cout<<endl;
}
return 0;
}