阿里巴巴2015秋招算法类机试题目(三阶魔方)
来源:互联网 发布:mac word空白页删不掉 编辑:程序博客网 时间:2024/04/29 09:30
- 题目
一个三阶魔方由六个面组成,颜色分别是白色(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
- 阿里巴巴2015秋招算法类机试题目(三阶魔方)
- 2015阿里巴巴秋招在线笔试题
- 2018秋招 今日头条1017 二阶魔方
- 阿里巴巴校招算法(黑板50个数字问题)
- 三阶魔方还原
- 三阶魔方教程
- 三阶魔方 js
- 三阶魔方还原
- 忆龙2009:三阶魔方的PROLOG算法分析
- 三阶魔方还原 two phase 算法 学习笔记
- 三阶魔方CFOP复原的C语言算法
- 智力题(阿里巴巴校招)
- 2015秋招阿里巴巴笔试题——系统工程师
- 三阶魔方复原公式
- 三阶魔方玩法总结
- 三阶魔方入门手法
- 三阶魔方恢复笔记
- C++ 三阶魔方还原
- HDU 2546饭卡 (01背包问题)
- (4.1.30)android 数据传递详解(Serialization、Parcelable、Parcel、Intent、Bundle)
- informatica session中bulk和normal模式
- 在Ubuntu QML应用中使用WebSocket建立TCP/IP连接
- 调用OpenSL ES NDK播放声音
- 阿里巴巴2015秋招算法类机试题目(三阶魔方)
- Android架构简介
- Limit JTextField input to a maximum length
- spring定时任务
- 【无限滚动加载数据】—infinite-scroll插件的使用---------下拉加载数据、无线滚动
- ural 1033. Labyrinth dfs
- Mysql (7)查询 删除重复
- (4.1.30.1)Android中Intent传递对象的两种方法(Bundle.putParcelable/putSerializable)!
- 程序编程入门基础1-参考《java语言的科学与艺术》感悟