大模拟,空想很容易把面和面之间的关系搞混
所以这时候需要自己找一个正方体(实在不行长方体代替)跟着图把每个面正方向标出来
然后模拟6种操作分别会对哪些块进行操作
对于储存数据的想法是,对输入输出进行分块,以c[i][j]表示是第i个面的第j块
具体参照下文输入输出内的
for(i=0;i<3;i++) for(j=0;j<18;j++){ scanf("%s",cd); c[j/3][j%3+i*3]=cd[0]; }
与
for(i=0;i<3;i++) for(j=0;j<18;j++) printf("%c%c",c[j/3][j%3+i*3],j<17?' ':' ');
#include<stdio.h> #include<string.h> char c[6][9],tmp[1001]; int getid(char c){ switch(c){ case 'W':return 0; case 'O':return 1; case 'R':return 2; case 'B':return 3; case 'G':return 4; case 'Y':return 5; } } void change(char cc){ char d1,d2,d3; if(cc=='W'){//以O面为缓存面 d1=c[1][0]; d2=c[1][3]; d3=c[1][6]; c[1][0]=c[4][0]; c[1][3]=c[4][3]; c[1][6]=c[4][6]; c[4][0]=c[3][0]; c[4][3]=c[3][3]; c[4][6]=c[3][6]; c[3][0]=c[2][0]; c[3][3]=c[2][3]; c[3][6]=c[2][6]; c[2][0]=d1; c[2][3]=d2; c[2][6]=d3; } else if(cc=='O'){//以W面为缓存面 d1=c[0][2]; d2=c[0][5]; d3=c[0][8]; c[0][2]=c[2][0]; c[0][5]=c[2][1]; c[0][8]=c[2][2]; c[2][0]=c[5][8]; c[2][1]=c[5][7]; c[2][2]=c[5][6]; c[5][8]=c[4][8]; c[5][7]=c[4][7]; c[5][6]=c[4][6]; c[4][8]=d1; c[4][7]=d2; c[4][6]=d3; } else if(cc=='R'){//以O面为缓存面 d1=c[1][6]; d2=c[1][7]; d3=c[1][8]; c[1][6]=c[0][6]; c[1][7]=c[0][7]; c[1][8]=c[0][8]; c[0][6]=c[3][2]; c[0][7]=c[3][1]; c[0][8]=c[3][0]; c[3][2]=c[5][8]; c[3][1]=c[5][5]; c[3][0]=c[5][2]; c[5][8]=d1; c[5][5]=d2; c[5][2]=d3; } else if(cc=='B'){//以G面为缓存面 d1=c[4][0]; d2=c[4][1]; d3=c[4][2]; c[4][0]=c[5][0]; c[4][1]=c[5][1]; c[4][2]=c[5][2]; c[5][0]=c[2][8]; c[5][1]=c[2][7]; c[5][2]=c[2][6]; c[2][8]=c[0][6]; c[2][7]=c[0][3]; c[2][6]=c[0][0]; c[0][6]=d1; c[0][3]=d2; c[0][0]=d3; } else if(cc=='G'){//以B面为缓存面 d1=c[3][6]; d2=c[3][7]; d3=c[3][8]; c[3][6]=c[0][2]; c[3][7]=c[0][1]; c[3][8]=c[0][0]; c[0][2]=c[1][2]; c[0][1]=c[1][1]; c[0][0]=c[1][0]; c[1][2]=c[5][0]; c[1][1]=c[5][3]; c[1][0]=c[5][6]; c[5][0]=d1; c[5][3]=d2; c[5][6]=d3; } else if(cc=='Y'){//以G面为缓存面 d1=c[4][2]; d2=c[4][5]; d3=c[4][8]; c[4][2]=c[1][2]; c[4][5]=c[1][5]; c[4][8]=c[1][8]; c[1][2]=c[2][2]; c[1][5]=c[2][5]; c[1][8]=c[2][8]; c[2][2]=c[3][2]; c[2][5]=c[3][5]; c[2][8]=c[3][8]; c[3][2]=d1; c[3][5]=d2; c[3][8]=d3; } int id=getid(cc); d1=c[id][0]; c[id][0]=c[id][6]; c[id][6]=c[id][8]; c[id][8]=c[id][2]; c[id][2]=d1; d1=c[id][1]; c[id][1]=c[id][3]; c[id][3]=c[id][7]; c[id][7]=c[id][5]; c[id][5]=d1; } int main(){ char cd[2]; int i,j,len; for(i=0;i<3;i++) for(j=0;j<18;j++){ scanf("%s",cd); c[j/3][j%3+i*3]=cd[0]; } scanf("%s",tmp); len=strlen(tmp); for(i=0;i<len;i++) change(tmp[i]); for(i=0;i<3;i++) for(j=0;j<18;j++) printf("%c%c",c[j/3][j%3+i*3],j<17?' ':' '); return 0; }