Magic Square
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 0 Accepted Submission(s): 0
Problem Description
A magic square is a 3×3 square, where each element is a single digit between 1 and 9 inclusive, and each digit appears exactly once. There are 4 different contiguous 2×2 subsquares in a magic squares, which are labeled from 1 to 4 as the following figure shows. These 2×2 subsquares can be rotated. We use the label of the subsquare with an uppercase letter to represent a rotation. If we rotate the subsquare clockwise, the letter is 'C'; if we rotate it counterclockwise, the letter is 'R'. The following figure shows two different rotations.
Now, given the initial state of a magic square and a sequence of rotations, please print the final state of the magic square after these rotations are performed.
Input
The first line of input is a single integer T (1≤T≤100), the number of test cases.
Each test case begins with a single integer n (1≤n≤100), the number of rotations. It is then followed by a 3×3 square, where every digit between 1 and 9 inclusive appears exactly once, representing the initial state of the magic square. The following n lines describe the sequence of rotations.
The test data guarantees that the input is valid.
Output
For each test case, display a 3×3 square, denoting the final state of the magic square.
Sample Input
1 2 123 456 789 1C 4R
Sample Output
413 569 72
代码:
#include <iostream>
#include <cstdio>
using namespace std;
char m[10][10];
void f1(char c)
{
char t;
if(c=='1')
{
t=m[0][0];
m[0][0]=m[1][0];
m[1][0]=m[1][1];
m[1][1]=m[0][1];
m[0][1]=t;
}
if(c=='2')
{
t=m[0][1];
m[0][1]=m[1][1];
m[1][1]=m[1][2];
m[1][2]=m[0][2];
m[0][2]=t;
}
if(c=='3')
{
t=m[1][0];
m[1][0]=m[2][0];
m[2][0]=m[2][1];
m[2][1]=m[1][1];
m[1][1]=t;
}
if(c=='4')
{
t=m[1][1];
m[1][1]=m[2][1];
m[2][1]=m[2][2];
m[2][2]=m[1][2];
m[1][2]=t;
}
}
void f2(char c)
{
for(int i=0;i<3;i++)
f1(c);
}
int main()
{
char c[2];
int T,n;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
cin>>m[i][j];
}
while(n--)
{
cin>>c;
if(c[1]=='C')
{
f1(c[0]);
}
else
{
f2(c[0]);
}
}
for(int i=0;i<3;i++)
cout<<m[i]<<endl;
}
return 0;
}