现在的位置: 首页 > 综合 > 正文

软件大赛模拟题—二阶魔方

2014年08月17日 ⁄ 综合 ⁄ 共 1959字 ⁄ 字号 评论关闭

题目见这个人的日志:http://blog.csdn.net/liuqiyao_01/article/details/8757800

我是用C++写的代码。

题目分析:该题目类型为模拟,我定义了一个数组magic[3][2][4], 3代表x,y,z; 2代表正反两面,4代表一个面的四个格子。然后我用纸折了一个正方体,然后一个个的查出来的。

#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
int magic[3][2][4];
void x_oper()
{
    int tmp1, tmp2;
    tmp1 = magic[0][0][3];
    for(int i = 3; i >= 1; i --)
    {
        magic[0][0][i] = magic[0][0][i - 1];
    }
    magic[0][0][0] = tmp1;
    tmp1 = magic[2][0][3];
    tmp2 = magic[2][0][2];
    magic[2][0][3] = magic[1][1][1];
    magic[2][0][2] = magic[1][1][0];
    magic[1][1][1] = magic[2][1][1];
    magic[1][1][0] = magic[2][1][0];
    magic[2][1][1] = magic[1][0][1];
    magic[2][1][0] = magic[1][0][0];
    magic[1][0][1] = tmp1;
    magic[1][0][0] = tmp2;
}
void y_oper()
{
    int tmp1, tmp2;
    tmp1 = magic[1][0][3];
    for(int i = 3; i >= 1; i --)
    {
        magic[1][0][i] = magic[1][0][i - 1];
    }
    magic[1][0][0] = tmp1;
    tmp1 = magic[2][0][2];
    tmp2 = magic[2][0][1];
    magic[2][0][2] = magic[0][0][2];
    magic[2][0][1] = magic[0][0][1];
    magic[0][0][2] = magic[2][1][2];
    magic[0][0][1] = magic[2][1][1];
    magic[2][1][2] = magic[0][1][2];
    magic[2][1][1] = magic[0][1][1];
    magic[0][1][2] = tmp1;
    magic[0][1][1] = tmp2;
}
void z_oper()
{
    int tmp1, tmp2;
    tmp1 = magic[2][0][3];
    for(int i = 3; i >= 1; i --)
    {
        magic[2][0][i] = magic[2][0][i - 1];
    }
    magic[2][0][0] = tmp1;
    tmp1 = magic[0][1][3];
    tmp2 = magic[0][1][2];
    magic[0][1][3] = magic[1][1][0];
    magic[0][1][2] = magic[1][1][3];
    magic[1][1][0] = magic[0][0][1];
    magic[1][1][3] = magic[0][0][0];
    magic[0][0][1] = magic[1][0][2];
    magic[0][0][0] = magic[1][0][1];
    magic[1][0][2] = tmp1;
    magic[1][0][1] = tmp2;
}
void print_color(int a, int b, int c)
{
    switch(magic[a][b][c])
    {
        case 0:printf("绿");break;
        case 1:printf("蓝");break;
        case 2:printf("红");break;
        case 3:printf("橙");break;
        case 4:printf("白");break;
        case 5:printf("黄");break;
    }
}
int main(void)
{
    freopen("f:\\code\\file\\data.txt", "r", stdin);
    char oper[10];
    while(scanf("%s", oper) == 1)
    {
        for(int i = 0; i < 3; i ++)
        {
            for(int j = 0; j < 2; j ++)
            {
                for(int k = 0; k < 4; k ++)
                {
                    magic[i][j][k] = i * 2 + j;
                }
            }
        }
        for(int i = 0; oper[i] != '\0'; i ++)
        {
            if(oper[i] == 'x') x_oper();
            else if(oper[i] == 'y') y_oper();
            else z_oper();
        }
        print_color(0, 0, 1);
        print_color(1, 0, 1);
        print_color(2, 0, 2);
        printf("\n");
    }
    return 0;
}

抱歉!评论已关闭.