原题链接传送门
这是道模拟题,还不错。
具体讲解看代码:
#include <bits/stdc++.h>
using namespace std;
char jz[35][35];
int n,m;
void fun(int num) {
int l = num % 4; //取余简化最终的旋转结果
if(l == 0) { //旋转至最初矩阵
printf("%d %d\n",n,m);
for(int i=0;i<n;i++){
printf("%s\n",jz[i]);
}
}
else if(l == 1 || l == -3) { //右旋90度 或 左旋270度
printf("%d %d\n",m,n);
for(int i=0; i<m; i++) {
for(int j=n-1; j>=0; j--) {
if(jz[j][i] == '-')
printf("|");
else if(jz[j][i] == '|')
printf("-");
else printf("%c",jz[j][i]);
}
printf("\n");
}
}
else if(l == 2 || l == -2) { //旋转180度
printf("%d %d\n",n,m);
for(int i=n-1; i>=0; i--) {
for(int j=m-1; j>=0; j--) {
printf("%c",jz[i][j]);
}
printf("\n");
}
}
else if(l == -1 || l == 3) { //左旋90度 或 右旋270度
printf("%d %d\n",m,n);
for(int i=m-1; i>=0; i--) {
for(int j=0; j<n; j++) {
if(jz[j][i] == '-')
printf("|");
else if(jz[j][i] == '|')
printf("-");
else printf("%c",jz[j][i]);
}
printf("\n");
}
}
}
int main() {
int t;
string dir;
scanf("%d",&t);
while(t--) {
scanf("%d%d",&n,&m);
memset(jz,0,sizeof(jz)); //矩阵重置
getchar();
for(int i=0; i<n; i++) {
scanf("%s",jz[i]);
}
cin>>dir; //输入旋转方向
int len = dir.length();
int numL,numR,num;
numL = numR = num = 0;
for(int i=0; i<=len; i++) {
if(dir[i] == 'L')
numL ++; //左旋一次加1
else if(dir[i] == 'R')
numR ++; //右旋一次加1
}
num = numR - numL; //最终旋转结果
fun(num);
printf("\n");
}
return 0;
}