# ZeroJudge - f633: 魔術方塊 2X2
### 題目連結:https://zerojudge.tw/ShowProblem?problemid=f633
###### tags: `ZeroJudge` `模擬`
```cpp=
#include <iostream>
using namespace std;
int topFace[4] = { 3, 3, 3, 3 }, bottomFace[4] = { 4, 4, 4, 4 }, leftFace[4] = { 5, 5, 5, 5 }, rightFace[4] = { 2, 2, 2, 2 }, frontFace[4] = { 1, 1, 1, 1 }, backFace[4] = { 6, 6, 6, 6 };
void TurnRight() {
int buffer;
buffer = rightFace[3];
for (int i = 3; i; --i)
rightFace[i] = rightFace[i - 1];
rightFace[0] = buffer;
for (int i = 1; i < 3; ++i) {
buffer = frontFace[i];
frontFace[i] = bottomFace[i]; bottomFace[i] = backFace[(i + 2) & 3];
backFace[(i + 2) & 3] = topFace[i]; topFace[i] = buffer;
}
}
void TurnTop() {
int buffer;
buffer = topFace[3];
for (int i = 3; i; --i)
topFace[i] = topFace[i - 1];
topFace[0] = buffer;
for (int i = 0; i < 2; ++i) {
buffer = frontFace[i];
frontFace[i] = rightFace[i]; rightFace[i] = backFace[i];
backFace[i] = leftFace[i]; leftFace[i] = buffer;
}
}
void TurnLeft() {
int buffer;
buffer = leftFace[3];
for (int i = 3; i; --i)
leftFace[i] = leftFace[i - 1];
leftFace[0] = buffer;
for (int i = 0; i < 2; ++i) {
buffer = frontFace[i * 3];
frontFace[i * 3] = topFace[i * 3]; topFace[i * 3] = backFace[(i * 3 + 2) & 3];
backFace[(i * 3 + 2) & 3] = bottomFace[i * 3]; bottomFace[i * 3] = buffer;
}
}
void TurnBottom() {
int buffer;
buffer = bottomFace[3];
for (int i = 3; i; --i)
bottomFace[i] = bottomFace[i - 1];
bottomFace[0] = buffer;
for (int i = 2; i < 4; ++i) {
buffer = frontFace[i];
frontFace[i] = leftFace[i]; leftFace[i] = backFace[i];
backFace[i] = rightFace[i]; rightFace[i] = buffer;
}
}
int main() {
cin.sync_with_stdio(false); cin.tie(nullptr);
int command;
while (cin >> command) {
switch (command) {
case 1:
TurnRight();
break;
case 2:
TurnTop();
break;
case 3:
TurnLeft();
break;
case 4:
TurnBottom();
break;
}
}
cout << frontFace[0] << ' ' << frontFace[1] << '\n' << frontFace[3] << ' ' << frontFace[2] << '\n';
}
```