洛谷——P2007 魔方

P2007 魔方

常神牛家的魔方都是3*3*3的三阶魔方,大家都见过。

模拟即可:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>

using namespace std;

string s;
int a[7][4][4];
//    1 2   3   4   5  6
//前、后、左、右、上、下。


void cz1() {
    int x=a[1][1][3],y=a[1][2][3],z=a[1][3][3];
    for(int i=1; i<=3; i++) a[1][i][3]=a[6][i][3];
    for(int i=1; i<=3; i++) a[6][i][3]=a[2][i][3];
    for(int i=1; i<=3; i++) a[2][i][3]=a[5][i][3];
    a[5][1][3]=x,a[5][2][3]=y,a[5][3][3]=z;

    int p[4][4];
    for(int i=1; i<=3; i++) {
        for(int j=1; j<=3; j++) {
            p[i][j]=a[4][3-j+1][i];
        }
    }
    for(int i=1; i<=3; i++)
        for(int j=1; j<=3; j++)
            a[4][i][j]=p[i][j];
}

void cz2() {
    int x=a[1][1][3],y=a[1][2][3],z=a[1][3][3];
    for(int i=1; i<=3; i++) a[1][i][3]=a[5][i][3];
    for(int i=1; i<=3; i++) a[5][i][3]=a[2][i][3];
    for(int i=1; i<=3; i++) a[2][i][3]=a[6][i][3];
    a[6][1][3]=x,a[6][2][3]=y,a[6][3][3]=z;

    int p[4][4];
    for(int i=1; i<=3; i++) {
        for(int j=1; j<=3; j++) {
            p[i][j]=a[4][j][3-i+1];
        }
    }
    for(int i=1; i<=3; i++)
        for(int j=1; j<=3; j++)
            a[4][i][j]=p[i][j];
}

void cz3(){
    int x=a[1][1][1],y=a[1][1][2],z=a[1][1][3];
    for(int i=1; i<=3; i++) a[1][1][i]=a[3][1][i];
    for(int i=1; i<=3; i++) a[3][1][i]=a[2][1][i];
    for(int i=1; i<=3; i++) a[2][1][i]=a[4][1][i];
    a[4][1][1]=x,a[4][1][2]=y,a[4][1][3]=z;

    int p[4][4];
    for(int i=1; i<=3; i++) {
        for(int j=1; j<=3; j++) {
            p[i][j]=a[5][3-j+1][i];
        }
    }
    for(int i=1; i<=3; i++)
        for(int j=1; j<=3; j++)
            a[5][i][j]=p[i][j];
}

void cz4(){
    int x=a[1][1][1],y=a[1][1][2],z=a[1][1][3];
    for(int i=1; i<=3; i++) a[1][1][i]=a[4][1][i];
    for(int i=1; i<=3; i++) a[4][1][i]=a[2][1][i];
    for(int i=1; i<=3; i++) a[2][1][i]=a[3][1][i];
    a[3][1][1]=x,a[3][1][2]=y,a[3][1][3]=z;
    
    int p[4][4];
    for(int i=1; i<=3; i++) {
        for(int j=1; j<=3; j++) {
            p[i][j]=a[5][j][3-i+1];
        }
    }
    for(int i=1; i<=3; i++)
        for(int j=1; j<=3; j++)
            a[5][i][j]=p[i][j];
}

void print()
{
    puts("xxxxxxxxxxxxxxxxxxxxxxx
");
    for(int i=1; i<=6; i++) {
        for(int j=1; j<=3; j++) {
            for(int k=1; k<=3; k++) {
                printf("%d",a[i][j][k]);
            }
            puts("");
        }
    }
}

int main() {
    cin>>s;
    for(int i=1; i<=6; i++) {
        for(int j=1; j<=3; j++) {
            for(int k=1; k<=3; k++)
                scanf("%1d",&a[i][j][k]);
        }
    }

    int l=s.length();
    for(int i=0; i<l; i++) {
        if(s[i]=='1') cz1();
        else if(s[i]=='2') cz2();
        else if(s[i]=='3') cz3();
        else cz4();
//        print();
    }

    for(int i=1; i<=6; i++) {
        for(int j=1; j<=3; j++) {
            for(int k=1; k<=3; k++) {
                printf("%d",a[i][j][k]);
            }
            puts("");
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/song-/p/9646905.html