二階魔方旋轉
阿新 • • 發佈:2018-12-10
題目
轉動魔方 題目描述 二階魔方有6個不同顏色的面,分別是紅(Red),橙(Orange),黃(Yellow),白(White),藍(Blue)和綠色(Green), 每個面都有 4個小正方塊拼成 初始狀態:魔方已經還原,並且W色朝下,Y色向上,R色在前,O色在後,B色左邊,G色右邊。
定義三種旋轉操作:
輸入說明 以命令列引數的形式,輸入任意的旋轉操作字串序列, 如 XYZZX
int main(int argc, char* argv[]) { char* input = argv[1]; … return 0; }
輸出說明 在初始狀態下,經過輸入序列的操作後,依次輸出正面的4個小方塊的顏色
示例1 輸入: XZY
輸出: GORW
示例2 輸入: XY
輸出: GGRW
思路
- 這是一道完全模擬的題目,把資料結構和操作定義出來就行了。
- 先定義了24個char型代表其24個小面,從 1 到 24,每4個組成一個大面:
- 根據定義,寫旋轉操作。
程式碼
#include <iostream>
#include <fstream>
#include <functional>
#include <algorithm>
#include <string.h>
#include <list>
#include <vector>
using namespace std;
void getResult();
void init();
void reX();
void reY();
void reZ();
void reZheng(char &c1, char &c2, char &c3, char &c4);
void reChe(char &c1, char &c2, char &c3, char &c4, char &c5, char &c6, char &c7, char &c8);
char* m = new char [25];
int main(int argc, char** argv) {
init();
char* input = argv[1];
char *p = input;
while (*p) {
switch (*p++)
{
case 'X':
//cout << "X:" << endl;
reX();
//getResult();
break;
case 'Y':
//cout << "Y:" << endl;
reY();
//getResult();
break;
case 'Z':
//cout << "Z:" << endl;
reZ();
//getResult();
break;
default:
break;
}
}
cout << m[1] << m[2] << m[3] << m[4] << endl;
system("pause");
return 0;
}
void getResult() {
for (int i = 1; i < 25; i++) {
cout << m[i];
if (i % 4 == 0) cout << endl;
}
}
void init() {
for (int i = 1; i<5; i++) { //x zheng
m[i] = 'R';
}
for (int i = 5; i<9; i++) { //y zheng
m[i] = 'G';
}
for (int i = 9; i<13; i++) { //z zheng
m[i] = 'Y';
}
for (int i = 13; i<17; i++) { //x fan
m[i] = 'O';
}
for (int i = 17; i<21; i++) { //y fan
m[i] = 'B';
}
for (int i = 21; i<25; i++) { //z fan
m[i] = 'W';
}
}
void reX() {
reZheng(m[5], m[6], m[7], m[8]);
reChe(m[4], m[2], m[9], m[11], m[13], m[15], m[24], m[22]);
}
void reY() {
reZheng(m[9], m[10], m[11], m[12]);
reChe(m[2], m[1], m[18], m[17], m[14], m[13], m[6], m[5]);
}
void reZ() {
reZheng(m[13], m[14], m[15], m[16]);
reChe(m[8], m[6], m[11], m[12], m[17], m[19], m[23], m[24]);
}
// 順時針旋轉90
void reZheng(char &c1, char &c2, char &c3, char &c4) {
char t = c1;
c1 = c3; c3 = c4; c4 = c2; c2 = t;
}
// 側邊
void reChe(char &c1, char &c2, char &c3, char &c4, char &c5, char &c6, char &c7, char &c8) {
char t1 = c1, t2 = c2;
c1 = c7, c2 = c8;
c7 = c5, c8 = c6;
c5 = c3, c6 = c4;
c3 = t1, c4 = t2;
}