字节跳动2018笔试附加题,二阶数字魔方

在这里插入图片描述
在这里插入图片描述

魔方的旋转方式大致可分为三个(顺时针可以通过对应逆时针旋转三次实现),右面(Y)逆时针,后面(X)逆时针,上面(Z)逆时针,封装成三个函数,分析发现,所有的旋转可以归结为一圈八个块的位置轮转(函数zheng)和一个侧面四个小块的位置轮换(函数ce)。
不超过5次的操作,可以通过一个类似深度优先遍历操作实现(这里会有很多重复,暂时没有优化)

#include<iostream>
#include<vector>
using namespace std;

#define DEPTH 5

class moFang{
   
    private:
    vector<int> list;
    vector<vector<int>> pos = {
   
        {
   0,1,2,3},        //up 0
        {
   4,5,10,11},        //left 1
        {
   6,7,12,13},        //before 2
        {
   8,9,14,15},        //right 3
        {
   16,17,18,19},        //down 4
        {
   20,21,22,23}        //behind 5
    };
    
    void zheng(int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8){
   
        int temp1 = list[p7], temp2 = list[p8];
        list[p7] = list[p5]; list[p8] = list[p6];
        list[p5] = list[p3]; list[p6] = list[p4];
        list[p3] = list[p1]; list
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值