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; }