洛谷——P2007 魔方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷——P2007 魔方相关的知识,希望对你有一定的参考价值。
https://www.luogu.org/problem/show?pid=2007
题目背景
常神牛从来没接触过魔方,所以他要借助计算机来玩。即使是这样,他还是很菜。
题目描述
常神牛家的魔方都是3*3*3的三阶魔方,大家都见过。
(更正:3 4以图为准。)
作为一名菜鸟,常神牛从网上搜了一篇攻略,并找人翻译成了他自己会做的方法。现在告诉你他的魔方情况,以及他从网上搜到的攻略,请你求出最后魔方变成什么样子。
输入输出格式
输入格式:
输入文件为cube.out。
第一行,一串数字(长度不大于100),表示常神牛从网上搜到的攻略。
下面6*3行,每行3个数字,每三行表示魔方一个面的情况,六个面的顺序是前、后、左、右、上、下。
输出格式:
输出文件为cube.out。
6*3行,表示处理后的魔方,形式同输入。
输入输出样例
输入样例#1:
23 121 221 111 123 321 111 123 321 132 132 231 132 121 112 233 332 111 333
输出样例#1:
123 222 113 212 321 113 122 321 132 121 333 121 211 312 113 331 111 331
说明
【样例解释】
是2操作后
最恶心的模拟教会了我要看样例解释~
1 #include <cstring> 2 #include <cstdio> 3 4 using namespace std; 5 6 const int N(119); 7 char s[N],num[4]; 8 int wait[4],wait_[5]; 9 int fro[4][4],beh[4][4]; 10 int lef[4][4],rig[4][4]; 11 int ove[4][4],und[4][4]; 12 13 void Cone() 14 { 15 for(int i=1;i<=3;i++) wait[i]=fro[i][3]; 16 for(int i=1;i<=3;i++) fro[i][3]=und[i][3]; 17 for(int i=1;i<=3;i++) und[i][3]=beh[i][3]; 18 for(int i=1;i<=3;i++) beh[i][3]=ove[i][3]; 19 wait_[1]=rig[1][1];wait_[2]=rig[1][3];wait_[3]=rig[3][1];wait_[4]=rig[3][3]; 20 for(int i=1;i<=3;i++) ove[i][3]=wait[i]; 21 for(int i=1;i<=3;i++) wait[i]=rig[i][1]; 22 for(int i=1;i<=3;i++) rig[i][1]=rig[3][i]; 23 for(int i=1;i<=3;i++) rig[3][i]=rig[3-i+1][3]; 24 for(int i=1;i<=3;i++) rig[i][3]=rig[1][i]; 25 for(int i=1;i<=3;i++) rig[1][i]=wait[3-i+1]; 26 rig[1][1]=wait_[3];rig[1][3]=wait_[1];rig[3][1]=wait_[4];rig[3][3]=wait_[2]; 27 } 28 29 void Ctwo() 30 { 31 for(int i=1;i<=3;i++) wait[i]=fro[i][3]; 32 for(int i=1;i<=3;i++) fro[i][3]=ove[i][3]; 33 for(int i=1;i<=3;i++) ove[i][3]=beh[i][3]; 34 for(int i=1;i<=3;i++) beh[i][3]=und[i][3]; 35 for(int i=1;i<=3;i++) und[i][3]=wait[i]; 36 wait_[1]=rig[1][1];wait_[2]=rig[1][3];wait_[3]=rig[3][1];wait_[4]=rig[3][3]; 37 for(int i=1;i<=3;i++) wait[i]=rig[i][1]; 38 for(int i=1;i<=3;i++) rig[i][1]=rig[1][3-i+1]; 39 for(int i=1;i<=3;i++) rig[1][i]=rig[i][3]; 40 for(int i=1;i<=3;i++) rig[i][3]=rig[3][3-i+1]; 41 for(int i=1;i<=3;i++) rig[3][i]=wait[i]; 42 rig[1][1]=wait_[2];rig[1][3]=wait_[4];rig[3][1]=wait_[1];rig[3][3]=wait_[3]; 43 } 44 45 void Cthree() 46 { 47 for(int i=1;i<=3;i++) wait[i]=fro[1][i]; 48 for(int i=1;i<=3;i++) fro[1][i]=lef[1][i]; 49 for(int i=1;i<=3;i++) lef[1][i]=beh[1][i]; 50 for(int i=1;i<=3;i++) beh[1][i]=rig[1][i]; 51 for(int i=1;i<=3;i++) rig[1][i]=wait[i]; 52 wait_[1]=ove[1][1];wait_[2]=ove[1][3];wait_[3]=ove[3][1];wait_[4]=ove[3][3]; 53 for(int i=1;i<=3;i++) wait[i]=ove[1][i]; 54 for(int i=1;i<=3;i++) ove[1][i]=ove[3-i+1][1]; 55 for(int i=1;i<=3;i++) ove[i][1]=ove[3][i]; 56 for(int i=1;i<=3;i++) ove[3][i]=ove[3-i+1][3]; 57 for(int i=1;i<=3;i++) ove[i][3]=wait[i]; 58 ove[1][1]=wait_[3];ove[1][3]=wait_[1];ove[3][1]=wait_[4];ove[3][3]=wait_[2]; 59 } 60 61 void Cfour() 62 { 63 for(int i=1;i<=3;i++) wait[i]=fro[1][i]; 64 for(int i=1;i<=3;i++) fro[1][i]=rig[1][i]; 65 for(int i=1;i<=3;i++) rig[1][i]=beh[1][i]; 66 for(int i=1;i<=3;i++) beh[1][i]=lef[1][i]; 67 for(int i=1;i<=3;i++) lef[1][i]=wait[i]; 68 wait_[1]=ove[1][1];wait_[2]=ove[1][3];wait_[3]=ove[3][1];wait_[4]=ove[3][3]; 69 for(int i=1;i<=3;i++) wait[i]=ove[1][i]; 70 for(int i=1;i<=3;i++) ove[1][i]=ove[i][3]; 71 for(int i=1;i<=3;i++) ove[i][3]=ove[3][3-i+1]; 72 for(int i=1;i<=3;i++) ove[3][i]=ove[i][1]; 73 for(int i=1;i<=3;i++) ove[i][1]=wait[3-i+1]; 74 ove[1][1]=wait_[2];ove[1][3]=wait_[4];ove[3][1]=wait_[1];ove[3][3]=wait_[3]; 75 } 76 77 int main() 78 { 79 // freopen("cube.in","r",stdin); 80 // freopen("cube.out","w",stdout); 81 scanf("%s",s); 82 for(int i=1;i<=3;i++) 83 { scanf("%s",num);for(int j=1;j<=3;j++) fro[i][j]=num[j-1]-\'0\'; } 84 for(int i=1;i<=3;i++) 85 { scanf("%s",num);for(int j=1;j<=3;j++) beh[i][j]=num[j-1]-\'0\'; } 86 for(int i=1;i<=3;i++) 87 { scanf("%s",num);for(int j=1;j<=3;j++) lef[i][j]=num[j-1]-\'0\'; } 88 for(int i=1;i<=3;i++) 89 { scanf("%s",num);for(int j=1;j<=3;j++) rig[i][j]=num[j-1]-\'0\'; } 90 for(int i=1;i<=3;i++) 91 { scanf("%s",num);for(int j=1;j<=3;j++) ove[i][j]=num[j-1]-\'0\'; } 92 for(int i=1;i<=3;i++) 93 { scanf("%s",num);for(int j=1;j<=3;j++) und[i][j]=num[j-1]-\'0\'; } 94 for(int i=0;i<strlen(s);i++) 95 if(s[i]==\'1\') Cone(); 96 else if(s[i]==\'2\') Ctwo(); 97 else if(s[i]==\'3\') Cthree(); 98 else if(s[i]==\'4\') Cfour(); 99 for(int i=1;i<=3;i++) 100 { for(int j=1;j<=3;j++) printf("%d",fro[i][j]); printf("\\n"); } 101 for(int i=1;i<=3;i++) 102 { for(int j=1;j<=3;j++) printf("%d",beh[i][j]); printf("\\n"); } 103 for(int i=1;i<=3;i++) 104 { for(int j=1;j<=3;j++) printf("%d",lef[i][j]); printf("\\n"); } 105 for(int i=1;i<=3;i++) 106 { for(int j=1;j<=3;j++) printf("%d",rig[i][j]); printf("\\n"); } 107 for(int i=1;i<=3;i++) 108 { for(int j=1;j<=3;j++) printf("%d",ove[i][j]); printf("\\n"); } 109 for(int i=1;i<=3;i++) 110 { for(int j=1;j<=3;j++) printf("%d",und[i][j]); printf("\\n"); } 111 return 0; 112 }
以上是关于洛谷——P2007 魔方的主要内容,如果未能解决你的问题,请参考以下文章