1. 程式人生 > >二階魔方旋轉

二階魔方旋轉

題目

轉動魔方 題目描述 二階魔方有6個不同顏色的面,分別是紅(Red),橙(Orange),黃(Yellow),白(White),藍(Blue)和綠色(Green), 每個面都有 4個小正方塊拼成 初始狀態:魔方已經還原,並且W色朝下,Y色向上,R色在前,O色在後,B色左邊,G色右邊。 魔方

定義三種旋轉操作: 旋轉1

旋轉2

輸入說明 以命令列引數的形式,輸入任意的旋轉操作字串序列, 如 XYZZX

int main(int argc, char* argv[]) { char* input = argv[1]; … return 0; }

輸出說明 在初始狀態下,經過輸入序列的操作後,依次輸出正面的4個小方塊的顏色

示例1 輸入: XZY

輸出: GORW

示例2 輸入: XY

輸出: GGRW

思路

  1. 這是一道完全模擬的題目,把資料結構和操作定義出來就行了。
  2. 先定義了24個char型代表其24個小面,從 1 到 24,每4個組成一個大面: 在這裡插入圖片描述
  3. 根據定義,寫旋轉操作。

程式碼

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