洛谷——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("
"); }
101     for(int i=1;i<=3;i++)
102     { for(int j=1;j<=3;j++) printf("%d",beh[i][j]); printf("
"); }
103     for(int i=1;i<=3;i++)
104     { for(int j=1;j<=3;j++) printf("%d",lef[i][j]); printf("
"); }
105     for(int i=1;i<=3;i++)
106     { for(int j=1;j<=3;j++) printf("%d",rig[i][j]); printf("
"); }
107     for(int i=1;i<=3;i++)
108     { for(int j=1;j<=3;j++) printf("%d",ove[i][j]); printf("
"); }
109     for(int i=1;i<=3;i++)
110     { for(int j=1;j<=3;j++) printf("%d",und[i][j]); printf("
"); }
111     return 0;
112 }
——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
原文地址:https://www.cnblogs.com/Shy-key/p/6913950.html