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 - 三阶魔方模拟题——高级的主要内容,如果未能解决你的问题,请参考以下文章