Monday, July 20, 2015

设计一个魔方(六面)的程序 【微软面试100题 第四十四题】 - tractorman - 博客园



设计一个魔方(六面)的程序 【微软面试100题 第四十四题】 - tractorman - 博客园
题目要求:
  设计一个魔方(六面)的程序。
题目分析:
  把魔方从正面看展开成一个平面,如图1所示。设计一个类,其中Spacexy[SPACE][LEN][LEN];中的SPACE为0~5表示六个面,每个数字代表哪一面见图1.LEN为0~2,[LEN][LEN]表示某个面的3*3的9个格子。
  类中的方法是根据展开的平面设计的,具体的某个面的某个格子由Spacexy[SPACE][LEN][LEN];定位。
代码实现:

复制代码
#include <iostream>
using namespace std;

class MagicCube
{
private:
    enum{LEN = 3,SPACE = 6};
    enum color{red,yellow,black,blue,green,purple};
    enum color Spacexy[SPACE][LEN][LEN];
public:
    MagicCube();
    ~MagicCube(){};
    void LeftRotate(int x,int y);
    ////void RightRotate(int x,int y);
    void UpRotate(int x,int y);
    //void DownRotate(int x,int y);
    void PrintCube();
};
void MagicCube::UpRotate(int x,int y)
{
    color tmp[3];

    for(int i = 0;i<3;i++)
        tmp[i] = Spacexy[0][i][y];

    for(int i = 0;i<3;i++)
        Spacexy[0][i][y] = Spacexy[5][i][y];
    for(int i = 0;i<3;i++)
        Spacexy[5][i][y] = Spacexy[2][i][2-y];
    for(int i = 0;i<3;i++)
        Spacexy[2][i][2-y] = Spacexy[4][i][y];
    for(int i = 0;i<3;i++)
        Spacexy[4][i][y] = tmp[i];
}
void MagicCube::PrintCube()
{
    for(int s = 0;s<6;s++)
    {
        switch(s)
        {
        case 0:cout << " 正面:" << endl; break;
        case 1:cout << " 右面:" << endl; break;
        case 2:cout << " 后面:" << endl; break;
        case 3:cout << " 左面:" << endl; break;
        case 4:cout << " 上面:" << endl; break;
        case 5:cout << " 下面:" << endl; break;
        default:break ;
        }
        for(int i = 0;i<3;i++)
        {
            for(int j = 0;j<3;j++)
            {
                cout << Spacexy[s][i][j] << " ";
            }
            cout << endl;
        }
        cout << endl;
    }

    cout << "---------------------------------------" << endl;
}
MagicCube::MagicCube()
{
    for(int i = 0;i<6;i++)//每一面一个颜色
        for(int j = 0;j<3;j++)
            for(int k = 0;k<3;k++)
            {
                Spacexy[i][j][k] = (color)i;
            }
}
void MagicCube::LeftRotate(int x,int y)
{
    color tmp[3];

    for(int i = 0;i<3;i++)
        tmp[i] = Spacexy[0][x][i];

    for(int i = 0;i<3;i++)
        Spacexy[0][x][i] = Spacexy[1][x][i];
    for(int i = 0;i<3;i++)
        Spacexy[1][x][i] = Spacexy[2][x][i];
    for(int i = 0;i<3;i++)
        Spacexy[2][x][i] = Spacexy[3][x][i];
    for(int i = 0;i<3;i++)
        Spacexy[3][x][i] = tmp[i];

}
int main(void )
{
    MagicCube a;
    a.PrintCube();
    a.UpRotate(0,0);
    a.PrintCube();
    return 0;
}
Read full article from 设计一个魔方(六面)的程序 【微软面试100题 第四十四题】 - tractorman - 博客园

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts