题目

给出一个 <math> <semantics> <mrow> <mi> n </mi> <mo> × </mo> <mi> m </mi> </mrow> <annotation encoding="application&#47;x&#45;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&#47;x&#45;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&#47;x&#45;tex"> n,m(1 \le n, m\le 200) </annotation> </semantics> </math>n,m(1n,m200),用空格隔开。

接下来 <math> <semantics> <mrow> <mi> n </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> n </annotation> </semantics> </math>n 行,每行输入 <math> <semantics> <mrow> <mi> m </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> m </annotation> </semantics> </math>m 个整数,表示输入的矩阵。

矩阵中元素都是 int 范围内的整数。

输出格式

输入 <math> <semantics> <mrow> <mi> m </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> m </annotation> </semantics> </math>m 行,每行 <math> <semantics> <mrow> <mi> n </mi> </mrow> <annotation encoding="application&#47;x&#45;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;
}

返回目录,查看更多