阿里巴巴2015秋招算法类机试题目(三阶魔方)

来源:互联网 发布:mac word空白页删不掉 编辑:程序博客网 时间:2024/04/29 09:30
  1. 题目
    一个三阶魔方由六个面组成,颜色分别是白色(W)、对面为黄色(Y)、红色(R)、对面为橙色(O)、绿色(G)、对面为蓝色(B)。如果手持魔方,白色向上,红色朝向自己,则绿色在左手侧。
    请写一个程序,对一个处于还原状态(各面各块同色)的魔方,进行操作,打印操作后的魔方状态。操作指令为单个操作指令组成的字符串。单个操作指令包括:
    1)U:白色面顺时针旋转90度
    2)D:黄色面顺时针旋转90度
    3)F:红色面顺时针旋转90度
    4)B:橙色面顺时针旋转90度
    5)L:绿色面顺时针旋转90度
    6)R:蓝色面顺时针旋转90度
    其中顺时针旋转定义为将该面朝向自己时的顺时针方向。
    按WYROGB的顺序输出经过操作后6个面的状态。每个面首先输出中心块颜色,然后从此面面向自己时的左下角块开始,顺时针顺出每块的颜色。输出一面后换行。
    请设计一个数据结构表示魔方,并基于该数据结构完成功能。
    请用C/C++,Java或Python语言实现。请注意尽量以可成功编译或可直接运行为标准来编写代码。

示例:
输入:
LR
输出:
WOOOWRRRW
YRRRYOOOY
RWWWRYYYR
OYYYOWWWO
GGGGGGGGG
BBBBBBBBB
2. 自己编写的程序

////////////////////////////////MagicCube.h #include "stdafx.h"#include<iostream>using namespace std;//定义每个面作为一个类class cover{public:    cover(char cen);    ~cover();    void Curfaceturn();    void display();    char Elem1,Elem2,Elem3,Elem4,Elem5,Elem6,Elem7,Elem8;//每个面的周边元素,从左下角开始为Elem1private:    char center;  //每个面的中心点,每个面中心颜色是确定的,也是每个面之所以为这个面的决定性属性    //后续颜色将不再改变,所以是类的私有数据成员。};cover::cover(char cen) //面类的构造函数,在构造函数里对每个面的九个点进行颜色初始化{    center=cen;      Elem1=Elem2=Elem3=Elem4=Elem5=Elem6=Elem7=Elem8=cen;}cover::~cover(){}void cover::Curfaceturn()  //每个面顺时针旋转时,其元素替换规律是一样的,所以可以只用类的成员函数来描述{    char E1,E2,E3;    E1=Elem1;E2=Elem2;E3=Elem3;//记住当前面的三个元素的值    Elem3=Elem1;    Elem2=Elem8;    Elem1=Elem7;    Elem8=Elem6;    Elem7=Elem5;    Elem6=Elem4;    Elem5=E3;    Elem4=E2;}void cover::display()//输出每个面的不同点的颜色{    cout<<center<<Elem1<<Elem2<<Elem3<<Elem4<<Elem5<<Elem6<<Elem7<<Elem8<<endl;}
// MagicCube.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include"MagicCube.h"#include<iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){    cover Cred('R'),Corenge('O'),Cwhite('W'),Cyellow('Y'),Cgreen('G'),Cblue('B');    char choice;    char N1,N2,N3,N4,N5,N6,N7,N8;    char s[20];    cout<<"您可以对魔方做如下操作:"<<endl;    cout<<"1)U:白色面顺时针旋转90度"<<endl;    cout<<"2)D:黄色面顺时针旋转90度"<<endl;    cout<<"3)F:红色面顺时针旋转90度"<<endl;    cout<<"4)B:橙色面顺时针旋转90度"<<endl;    cout<<"5)L:绿色面顺时针旋转90度"<<endl;    cout<<"6)R:蓝色面顺时针旋转90度"<<endl;    cin>>s;    int i=0;    while (s[i]!='\0')    {        choice=s[i];    switch (choice)    {    case 'U':Cwhite.Curfaceturn();//面旋转,自身元素的更新        //接下来是不同面之间元素的更新        N3=Cred.Elem3;        N4=Cred.Elem4;        N5=Cred.Elem4;        Cred.Elem3=Cblue.Elem3;        Cred.Elem4=Cblue.Elem4;          Cred.Elem5=Cblue.Elem5;        Cblue.Elem3=Corenge.Elem7;         Cblue.Elem4=Corenge.Elem8;        Cblue.Elem5=Corenge.Elem1;        Corenge.Elem7=Cgreen.Elem3;        Corenge.Elem8=Cgreen.Elem4;        Corenge.Elem1=Cgreen.Elem5;        Cgreen.Elem3=N3;         Cgreen.Elem4=N4;         Cgreen.Elem5=N5;        break;    case 'D':Cyellow.Curfaceturn();        N1=Cred.Elem1;        N8=Cred.Elem8;        N7=Cred.Elem7;        Cred.Elem1=Cgreen.Elem1;        Cred.Elem8=Cgreen.Elem8;        Cred.Elem7=Cgreen.Elem7;        Cgreen.Elem1=Corenge.Elem5;        Cgreen.Elem8=Corenge.Elem4;        Cgreen.Elem7=Corenge.Elem3;        Corenge.Elem5=Cblue.Elem1;        Corenge.Elem4=Cblue.Elem8;        Corenge.Elem3=Cblue.Elem7;        Cblue.Elem1=N1;        Cblue.Elem8=N8;        Cblue.Elem7=N7;        break;    case 'F':Cred.Curfaceturn();        N1=Cwhite.Elem1;        N8=Cwhite.Elem8;        N7=Cwhite.Elem7;        Cwhite.Elem1=Cgreen.Elem7;        Cwhite.Elem8=Cgreen.Elem6;        Cwhite.Elem7=Cgreen.Elem5;        Cgreen.Elem7=Cyellow.Elem5;        Cgreen.Elem6=Cyellow.Elem4;        Cgreen.Elem5=Cyellow.Elem3;        Cyellow.Elem5=Cblue.Elem3;        Cyellow.Elem4=Cblue.Elem2;        Cyellow.Elem3=Cblue.Elem1;        Cblue.Elem3=N1;        Cblue.Elem2=N8;        Cblue.Elem1=N7;        break;    case 'B':Corenge.Curfaceturn();        N3=Cwhite.Elem3;        N4=Cwhite.Elem4;        N5=Cwhite.Elem5;        Cwhite.Elem3=Cblue.Elem5;        Cwhite.Elem4=Cblue.Elem6;        Cwhite.Elem5=Cblue.Elem7;        Cblue.Elem5=Cyellow.Elem7;        Cblue.Elem6=Cyellow.Elem8;        Cblue.Elem7=Cyellow.Elem1;        Cyellow.Elem7=Cgreen.Elem1;        Cyellow.Elem8=Cgreen.Elem2;        Cyellow.Elem1=Cgreen.Elem3;        Cgreen.Elem1=N3;        Cgreen.Elem2=N4;        Cgreen.Elem3=N5;        break;    case 'L':Cgreen.Curfaceturn();        N3=Cwhite.Elem3;        N2=Cwhite.Elem2;        N1=Cwhite.Elem1;        Cwhite.Elem3=Corenge.Elem3;        Cwhite.Elem2=Corenge.Elem3;        Cwhite.Elem1=Corenge.Elem1;        Corenge.Elem3=Cyellow.Elem3;        Corenge.Elem2=Cyellow.Elem2;        Corenge.Elem1=Cyellow.Elem1;        Cyellow.Elem3=Cred.Elem3;        Cyellow.Elem2=Cred.Elem2;        Cyellow.Elem1=Cred.Elem1;        Cred.Elem3=N3;        Cred.Elem2=N2;        Cred.Elem1=N1;        break;    case 'R':Cblue.Curfaceturn();        N5=Cwhite.Elem5;        N6=Cwhite.Elem6;        N7=Cwhite.Elem7;        Cwhite.Elem5=Cred.Elem5;        Cwhite.Elem6=Cred.Elem6;        Cwhite.Elem7=Cred.Elem7;        Cred.Elem5=Cyellow.Elem5;        Cred.Elem6=Cyellow.Elem6;        Cred.Elem7=Cyellow.Elem7;        Cyellow.Elem5=Corenge.Elem5;        Cyellow.Elem6=Corenge.Elem6;        Cyellow.Elem7=Corenge.Elem7;        Corenge.Elem5=N5;        Corenge.Elem6=N6;        Corenge.Elem7=N7;        break;    default:        break;    }        i++;    }    Cwhite.display();    Cyellow.display();    Cred.display();    Corenge.display();    Cgreen.display();    Cblue.display();    system("pause");    return 0;}

编译环境VS2012,编译结果:
这里写图片描述
才疏学浅,敬请指针,谢谢!

0 0
原创粉丝点击