# 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'; } ```