题目链接:点击打开链接
题意:旋转矩阵
题解:可以定义右旋为+1,左旋为+3,最终结果对 4 取模就知道旋转结果。右旋 2 次、左旋 1 次可以 当做右旋 2、3 次处理,所以只要写出矩阵右旋 操作的函数就可以了。矩阵右旋坐标转换公式: a[i][j]=b[j][n-1-i],a 是原矩阵,b 是右旋的矩阵, n 是总行数,m 是总列数(a[n][m])。注意“-” 和“|”也要变形
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int maxn = 50;
int main(){
int z;
cin >> z;
while(z--){
int n,m;
cin >> n >> m;
char q[maxn][maxn];
char b[1005];
for(int i = 0 ; i < n ; i ++){
scanf("%s",q[i]);
}
scanf("%s",b);
int len = strlen(b);
int num = 0;
for(int i = 0 ; i < len ; i ++){
if(b[i] == 'R')
num ++;
else
num --;
}
num = (num %4 +4)%4;
if(num%2 == 1){
for(int i = 0 ; i < n ; i ++){
for(int j = 0 ; j < m ; j ++){
// cout << q[i][j];
if(q[i][j] == '-')
q[i][j] = '|';
else if(q[i][j] == '|')
q[i][j] = '-';
}
//cout << endl;
}
swap(n,m);
cout << n << " " << m << endl;
}
else {
cout << n << " " << m << endl;
}
if(num == 0){
for(int i = 0 ; i < n ; i ++){
for(int j = 0 ; j < m ; j ++)
cout << q[i][j] ;
cout << endl;
}
}
else if(num == 1){
// cout << n << " " << m << endl;
for(int i = 0 ; i < n ; i ++){
for(int j = m -1 ; j >= 0 ; j --)
cout << q[j][i] ;
cout << endl;
}
}
else if(num == 2){
for(int i = n-1 ; i >= 0 ; i --){
for(int j = m - 1 ; j >= 0 ; j --)
cout << q[i][j] ;
cout << endl;
}
}
else if(num == 3){
for(int i = n-1 ; i >= 0 ; i --){
for(int j = 0 ; j < m ; j ++)
cout << q[j][i] ;
cout << endl;
}
} cout << endl;
}
return 0;
}