对一个复原魔方进行操作,记录操作后魔方状态

下面为为阿里巴巴的一道笔试题

一个三阶魔方由六个面组成,颜色分别是白色(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++代码代码实现。具体如下:

包括的头文件

#include "stdafx.h"
#include <string>
#include <iostream>

结构体

总共六个面,每个面有九个格每个格子从编号如下:

0|1|2
3|4|5
6|7|8
struct mofang_status{
    std::string face_f[9];//front面,红色面
    std::string face_l[9];//left面,绿色面
    std::string face_r[9];//right面,蓝色面
    std::string face_u[9];//up面,白色面
    std::string face_d[9];//down面,黄色面
    std::string face_b[9];//back面,橙色面
};

操作

U 白面顺时针旋转90度

变动包括两部分:
1 与U面直接相连四个面的三个格顺时针替换。
2 U面本身瞬时针移动。

  • front(R)的i号位被被right的i(B)号位代替
  • right的i(B)号位被back的i号位代替(O)
  • back(O)的i号位被left(G)的i号位代替
  • left(G)的i号位被front(R)的i号位代替
  • up(W)面的位置顺时针转动一圈变成:
    6|3|0
    7|4|1
    8|5|2
void  U_function(mofang_status &status){
    std::string temp;
    for (int i =0;i<3;i++)
    {
        temp=status.face_f[i];
        status.face_f[i]=status.face_r[i];
        status.face_r[i]=status.face_b[i];
        status.face_b[i]=status.face_l[i];
        status.face_l[i]=temp;
    }
    temp = status.face_u[0];
    status.face_u[0]=status.face_u[6];
    status.face_u[6]=status.face_u[8];
    status.face_u[8]=status.face_u[2];
    status.face_u[2]=temp;
    temp = status.face_u[1];
    status.face_u[1]=status.face_u[3];
    status.face_u[
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值