• 设计一个魔方(六面)的程序 【微软面试100题 第四十四题】


    题目要求:

      设计一个魔方(六面)的程序。

    题目分析:

      把魔方从正面看展开成一个平面,如图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;
    }
  • 相关阅读:
    pku2992 Divisors
    pku3090 Visible Lattice Points
    pku3615 Cow Hurdles
    禁止 verifier.dll 监控程序
    运行ogreSDK的samples
    #pragma pack(n) 啥时候可以不再忘记?
    游戏开发流程图。
    希望可以尽快的写篇自己的成果。
    windows与OS X下的std::string
    VS2008鼠标右键不灵敏,TFS的Local Path无法打开对应文件夹
  • 原文地址:https://www.cnblogs.com/tractorman/p/4081422.html
Copyright © 2020-2023  润新知