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



  • 相关阅读:
    关于阿里云centos 2.6下手机表情输入后无法保存到mysql数据库的问题调研及mysql版本从5.1升级到5.7的全过程纪要
    EXTJS 5 学习笔记2
    EXTJS 5 学习笔记1
    关于java.lang.String理解中的一些难点
    关于centos7中使用rpm方式安装mysql5.7版本后无法使用root登录的问题
    大数据专栏
    过采样中用到的SMOTE算法
    linux后台执行命令:&和nohup
    P,R,F1 等性能度量(二分类、多分类)
    word2vec模型cbow与skip-gram的比较
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6958061.html
Copyright © 2020-2023  润新知