软件发布

手机版,更便捷!

下载排行榜首页软件下载安卓下载资讯教程推荐专题装机必备
当前位置:文章资讯 > 编程开发 >

2*2*3魔方还原公式是什么?网易的算法高手GG写给MM的魔方

时间:2016-12-10 浏览次数: 编辑:9upk

 题目描述:
据说,网易有自主开发的游戏引擎,参与开发的个个都是算法高手,喜欢研究各种好玩的东西。
有一天,有个小mm得到了一个魔方,不过魔方不是常规的3*3*3的!
而是大小是2*2*3的一个长方体!她实在搞不定这种异形魔方,
于是只好求助于引擎部某GG。那GG看到后说,这太简单了,等我一会儿。
没多久,程序写好后,一下子就把小mm需要的公式算出来了,
那个mm惊叹不已,并用这些公式迅速把魔方还原好了。让小mm佩服的不得了。
你的算法能力怎么样呢?你也能办到吗?

输入:
魔方摆放例图(并且假设颜色分布为上黄下白左蓝右绿前红后橙):
           2      3
        1      0

           10     11
        9      8

           6      7
        5      4

请你编写函数:
int solve(const int m[], const int s[], char ans[])
参数意义如下:
m[] : 例图中的是位置编号,也是复原后的方块编号;
   m[a] = b 表示在位置a的地方,放了一个编号为b的方块
   m这个数组的长度为12
s[] : 用来表示每一块主色的朝向,黄白为主色,没有前两色时以红橙为主色;
   主色面向上为0,向下为1,左为2,右为3,前为4,后为5
   如附图sample,U面上各块,主色都面向上,朝向值为0
   中层RF块,橙色面朝右,值为3。s这个数组的长度为12


输出:
ans[]:返回复原(只需要各面同色)的最少的操作步骤,写法类似魔方公式:
   UDLRFB分别表示相应面,单独写一个字母表示这个面顺时针旋转90度,
   R2表示R面旋转180度,U'表示U面逆时针旋转90度。
   U的旋转方向是0->1->2->3,U'是0->3->2->1
   D的旋转方向是4->7->6->5,D'是4->5->6->7
   R2只算一步,步数以这6个字母的出现次数为准,之间不要用空格分隔
函数返回值:返回还原的最少步数,要与ans里的步数一致。

样例输入:
m= 3 2 4 5 0 1 7 6 9 11 10 8   s= 0 0 0 0 1 1 1 1 4 4 5 5

样例输出:
4 DUF2R2

其它信息:
输出的如4 DUF2R2,4表示返回值,返回值的答案唯一
DUF2R2为ans数组中的内容,ans中的内容不唯一,只要是任意一解即可


样例中的实际形状见题目数据保证出的数据是合理的,不会出现还原不了的情况
提交的代码不要出现main函数

另:如果你是色盲或者色弱,看不清楚图片上的颜色,
也请加初级一群19472277(已经在中级群或者主群的就免加了),会给你更详细的解释


难度:Hard

标签: 魔方

上一篇:魔法数字Magic Number C语言代码下一篇:Delphi 工程管理器详细图文教程_久友介绍

相关文章

最新评论

本类排行榜

图文专题

  • 类地下城割草手游推荐
  • 种菜小游戏
  • 单机打鱼游戏
  • 好玩的放置修仙手游