• 设计一个魔方(六面)的程序 【微软面试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;
    }



  • 相关阅读:
    Balanced Binary Tree
    Swap Nodes in Pairs
    Reverse Nodes in k-Group
    Reverse Linked List II
    Remove Nth Node From End of List
    Remove Duplicates from Sorted List II
    Remove Duplicates from Sorted List
    Partition List
    Merge Two Sorted Lists
    【Yii2.0】1.2 Apache检查配置文件语法
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6958061.html
Copyright © 2020-2023  润新知