ZJNU 1196 - 三阶魔方模拟题——高级

Posted stelayuri

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZJNU 1196 - 三阶魔方模拟题——高级相关的知识,希望对你有一定的参考价值。

大模拟,空想很容易把面和面之间的关系搞混

所以这时候需要自己找一个正方体(实在不行长方体代替)跟着图把每个面正方向标出来

然后模拟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? :
);

(解题极其耗时,但是不难)

  1 /*
  2 Written By StelaYuri
  3 On 2019/10/26
  4 */
  5 #include<stdio.h>
  6 #include<string.h>
  7 char c[6][9],tmp[1001];
  8 int getid(char c){
  9     switch(c){
 10         case W:return 0;
 11         case O:return 1;
 12         case R:return 2;
 13         case B:return 3;
 14         case G:return 4;
 15         case Y:return 5;
 16     }
 17 }
 18 void change(char cc){
 19     char d1,d2,d3;
 20     if(cc==W){//以O面为缓存面
 21         d1=c[1][0];
 22         d2=c[1][3];
 23         d3=c[1][6];
 24         c[1][0]=c[4][0];
 25         c[1][3]=c[4][3];
 26         c[1][6]=c[4][6];
 27         c[4][0]=c[3][0];
 28         c[4][3]=c[3][3];
 29         c[4][6]=c[3][6];
 30         c[3][0]=c[2][0];
 31         c[3][3]=c[2][3];
 32         c[3][6]=c[2][6];
 33         c[2][0]=d1;
 34         c[2][3]=d2;
 35         c[2][6]=d3;
 36     }
 37     else if(cc==O){//以W面为缓存面
 38         d1=c[0][2];
 39         d2=c[0][5];
 40         d3=c[0][8];
 41         c[0][2]=c[2][0];
 42         c[0][5]=c[2][1];
 43         c[0][8]=c[2][2];
 44         c[2][0]=c[5][8];
 45         c[2][1]=c[5][7];
 46         c[2][2]=c[5][6];
 47         c[5][8]=c[4][8];
 48         c[5][7]=c[4][7];
 49         c[5][6]=c[4][6];
 50         c[4][8]=d1;
 51         c[4][7]=d2;
 52         c[4][6]=d3;
 53     }
 54     else if(cc==R){//以O面为缓存面
 55         d1=c[1][6];
 56         d2=c[1][7];
 57         d3=c[1][8];
 58         c[1][6]=c[0][6];
 59         c[1][7]=c[0][7];
 60         c[1][8]=c[0][8];
 61         c[0][6]=c[3][2];
 62         c[0][7]=c[3][1];
 63         c[0][8]=c[3][0];
 64         c[3][2]=c[5][8];
 65         c[3][1]=c[5][5];
 66         c[3][0]=c[5][2];
 67         c[5][8]=d1;
 68         c[5][5]=d2;
 69         c[5][2]=d3;
 70     }
 71     else if(cc==B){//以G面为缓存面
 72         d1=c[4][0];
 73         d2=c[4][1];
 74         d3=c[4][2];
 75         c[4][0]=c[5][0];
 76         c[4][1]=c[5][1];
 77         c[4][2]=c[5][2];
 78         c[5][0]=c[2][8];
 79         c[5][1]=c[2][7];
 80         c[5][2]=c[2][6];
 81         c[2][8]=c[0][6];
 82         c[2][7]=c[0][3];
 83         c[2][6]=c[0][0];
 84         c[0][6]=d1;
 85         c[0][3]=d2;
 86         c[0][0]=d3;
 87     }
 88     else if(cc==G){//以B面为缓存面
 89         d1=c[3][6];
 90         d2=c[3][7];
 91         d3=c[3][8];
 92         c[3][6]=c[0][2];
 93         c[3][7]=c[0][1];
 94         c[3][8]=c[0][0];
 95         c[0][2]=c[1][2];
 96         c[0][1]=c[1][1];
 97         c[0][0]=c[1][0];
 98         c[1][2]=c[5][0];
 99         c[1][1]=c[5][3];
100         c[1][0]=c[5][6];
101         c[5][0]=d1;
102         c[5][3]=d2;
103         c[5][6]=d3;
104     }
105     else if(cc==Y){//以G面为缓存面
106         d1=c[4][2];
107         d2=c[4][5];
108         d3=c[4][8];
109         c[4][2]=c[1][2];
110         c[4][5]=c[1][5];
111         c[4][8]=c[1][8];
112         c[1][2]=c[2][2];
113         c[1][5]=c[2][5];
114         c[1][8]=c[2][8];
115         c[2][2]=c[3][2];
116         c[2][5]=c[3][5];
117         c[2][8]=c[3][8];
118         c[3][2]=d1;
119         c[3][5]=d2;
120         c[3][8]=d3;
121     }
122     int id=getid(cc);
123     d1=c[id][0];
124     c[id][0]=c[id][6];
125     c[id][6]=c[id][8];
126     c[id][8]=c[id][2];
127     c[id][2]=d1;
128     d1=c[id][1];
129     c[id][1]=c[id][3];
130     c[id][3]=c[id][7];
131     c[id][7]=c[id][5];
132     c[id][5]=d1;
133 }
134 int main(){
135     char cd[2];
136     int i,j,len;
137     for(i=0;i<3;i++)
138         for(j=0;j<18;j++){
139             scanf("%s",cd);
140             c[j/3][j%3+i*3]=cd[0];
141         }
142     scanf("%s",tmp);
143     len=strlen(tmp);
144     for(i=0;i<len;i++)
145         change(tmp[i]);
146     for(i=0;i<3;i++)
147         for(j=0;j<18;j++)
148             printf("%c%c",c[j/3][j%3+i*3],j<17? :
);
149     
150     return 0;
151 }

 

以上是关于ZJNU 1196 - 三阶魔方模拟题——高级的主要内容,如果未能解决你的问题,请参考以下文章

001-三阶魔方-概述及层先法

PyQt5 高级教程

四大古典益智玩具------三阶魔方

四大古典益智玩具------三阶魔方

三阶魔方教程

三阶魔方公式速记