题目:A - Mental Rotation
题意:给出字符组成的图形,字符串:“L”“R”组成的,打印出经过翻转后的图形。
思路:L,R翻转四次就重复了,l=l%4,r=r%4;向左翻转3次等于向右翻转1次,l=4-r;再模拟向右翻转的即可。
AC代码
#include <bits/stdc++.h>
using namespace std;
char a[1010][1010];
char aa[1010][1010];
int n;
void right()
{
for(int i=0;i<n; i++)
{
for(int j=0;j<n; j++)
{
if(a[i][j]=='>')
aa[j][n-1-i]='v';
else if(a[i][j]=='<')
aa[j][n-1-i]='^';
else if(a[i][j]=='^')
aa[j][n-1-i]='>';
else if(a[i][j]=='.')
aa[j][n-1-i]='.';
else if(a[i][j]=='v')
aa[j][n-1-i]='<';
}
}
for(int i=0;i<n; i++)
{
for(int j=0; j<n; j++)
{
a[i][j]=aa[i][j];
}
}
}
int main()
{
char s[110];
cin>>n;
getchar();
cin>>s;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
cin>>a[i][j];
}
int l=0,r=0;
for(int i=0; s[i]!='\0'; i++)
{
if(s[i]=='L')
l++;
else
r++;
}
l=l%4;
r=r%4;
r=(r+4-l)%4;
while(r--)
{
right();
}
for(int i=0;i<n; i++)
{
for(int j=0;j<n; j++)
{
if(j==n-1)
cout<<a[i][j]<<endl;
else
cout<<a[i][j];
}
}
return 0;
}