标签:upload show 技术分享 方法 处理 攻略 puts name pac
常神牛从来没接触过魔方,所以他要借助计算机来玩。即使是这样,他还是很菜。
常神牛家的魔方都是3*3*3的三阶魔方,大家都见过。
(更正:3 4以图为准。)
作为一名菜鸟,常神牛从网上搜了一篇攻略,并找人翻译成了他自己会做的方法。现在告诉你他的魔方情况,以及他从网上搜到的攻略,请你求出最后魔方变成什么样子。
输入格式:
输入文件为cube.out。
第一行,一串数字(长度不大于100),表示常神牛从网上搜到的攻略。
下面6*3行,每行3个数字,每三行表示魔方一个面的情况,六个面的顺序是前、后、左、右、上、下。
输出格式:
输出文件为cube.out。
6*3行,表示处理后的魔方,形式同输入。
23 121 221 111 123 321 111 123 321 132 132 231 132 121 112 233 332 111 333
123 222 113 212 321 113 122 321 132 121 333 121 211 312 113 331 111 331
【样例解释】
麻烦一点的模拟,但是看着样例的图还是比较好做的。
看题目中的四种操作,1,2和3,4只是方向不同,那我们就可以只考虑1,3这两种情况,至于2和4,可以分别调用3次1,3,因为4次是一圈,3次顺时针也就是1次逆时针。
喜闻乐见的Code
#include<cstdio> #include<cstring> using namespace std; struct Cube { static const int z=4,maxop=105; char op[maxop],tmp[z],T[z][z]; char front[z][z],behind[z][z]; char left[z][z],right[z][z]; char up[z][z],down[z][z]; void Build_Cube() { scanf("%s",op); for(int o=1;o<=6;o++) for(int i=1;i<z;i++) { if(o==1) scanf("%s",front[i]+1); else if(o==2) scanf("%s",behind[i]+1); else if(o==3) scanf("%s",left[i]+1); else if(o==4) scanf("%s",right[i]+1); else if(o==5) scanf("%s",up[i]+1); else scanf("%s",down[i]+1); } } void Op(char c) { if(c==‘1‘) { for(int i=1;i<z;i++) tmp[i]=front[i][3]; for(int i=1;i<z;i++) front[i][3]=down[i][3]; for(int i=1;i<z;i++) down[i][3]=behind[i][3]; for(int i=1;i<z;i++) behind[i][3]=up[i][3]; for(int i=1;i<z;i++) up[i][3]=tmp[i]; for(int i=1;i<z;i++) for(int j=1;j<z;j++) T[i][j]=right[i][j]; for(int i=1;i<z;i++) for(int j=1;j<z;j++) right[i][j]=T[z-j][i]; } else if(c==‘2‘) for(int i=1;i<z;i++) Op(‘1‘); else if(c==‘3‘) { for(int i=1;i<z;i++) tmp[i]=front[1][i]; for(int i=1;i<z;i++) front[1][i]=left[1][i]; for(int i=1;i<z;i++) left[1][i]=behind[1][i]; for(int i=1;i<z;i++) behind[1][i]=right[1][i]; for(int i=1;i<z;i++) right[1][i]=tmp[i]; for(int i=1;i<z;i++) for(int j=1;j<z;j++) T[i][j]=up[i][j]; for(int i=1;i<z;i++) for(int j=1;j<z;j++) up[i][j]=T[z-j][i]; } else for(int i=1;i<z;i++) Op(‘3‘); return; } void Print() { for(int o=1;o<=6;o++) for(int i=1;i<z;i++) { if(o==1) printf("%s",front[i]+1); else if(o==2) printf("%s",behind[i]+1); else if(o==3) printf("%s",left[i]+1); else if(o==4) printf("%s",right[i]+1); else if(o==5) printf("%s",up[i]+1); else printf("%s",down[i]+1); puts(""); } } void Play_Cube() { Build_Cube(); for(int i=0;i<strlen(op);i++) Op(op[i]); Print(); } }cube; int main() { cube.Play_Cube(); return 0; }
标签:upload show 技术分享 方法 处理 攻略 puts name pac
原文地址:http://www.cnblogs.com/NuclearSubmarines/p/6921537.html