1,2,3,4,5,6六个面分别朝上 判断是否匹配 不匹配则顺时针旋转总共三次 每次都要判断是否匹配
总共24种状态 每种状态判断一遍 满足就输出TRUE 否则输出FALSE
哎 代码写得好搓
#include<cstdio>
#include<cstring>
int rot_up(char *p)//返回1说明完全匹配了
{
char q[4];
q[0] = p[6];q[1] = p[7];q[2] = p[10];q[3] = p[11];
p[6] = q[1];p[7] = q[3];p[10] = q[0];p[11] = q[2];
for(int i = 0; i < 6;i++)
if(p[i] != p[i+6])return 0;
return 1;
}
int rot_right(char *p)
{
char q[4];
q[0] = p[7];q[1] = p[8];q[2] = p[9];q[3] = p[10];
p[7] = q[2];p[8] = q[0];p[9] = q[3];p[10] =q[1];
for(int i = 0; i < 6;i++)
if(p[i] != p[i+6])return 0;
return 1;
}
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif // LOCAL
char str[15];
while(gets(str)!=NULL)
{
int i,flag = 0;
for(i = 0; i < 6;i++)
if(str[i] != str[i+6])break;
if(i == 6){printf("TRUE\n");continue;}
char s[15];
strcpy(s,str);
for(i = 0; i < 3&&flag!=1; i++)
if(rot_right(s))flag = 1;
if(flag == 1){printf("TRUE\n");continue;}
for(i = 0; i < 4&&flag!=1; i++)//3面朝上
{
if(i == 0)flag = rot_up(s);
else flag = rot_right(s);
}
if(flag == 1){printf("TRUE\n");continue;}
strcpy(s,str);
for(i = 0; i < 4&&flag!=1; i++)//2面朝上
{
if(i == 0)flag = rot_up(s);
else flag = rot_right(s);
}
if(flag == 1){printf("TRUE\n");continue;}
strcpy(s,str);
//4面朝上
flag = rot_right(s);
if(flag == 1){printf("TRUE\n");continue;}
for(i = 0; i < 4&&flag!=1; i++)
{
if(i == 0)flag = rot_up(s);
else flag = rot_right(s);
}
if(flag == 1){printf("TRUE\n");continue;}
//5面朝上
strcpy(s,str);
if(rot_right(s)){printf("TRUE\n");continue;}
if(rot_right(s)){printf("TRUE\n");continue;}
for(i = 0; i < 4&&flag!=1; i++)
{
if(i == 0)flag = rot_up(s);
else flag = rot_right(s);
}
if(flag == 1){printf("TRUE\n");continue;}
//6面朝上
strcpy(s,str);
if(rot_up(s)){printf("TRUE\n");continue;}
for(i = 0; i < 4&&flag!=1; i++)
{
if(i == 0)flag = rot_up(s);
else flag = rot_right(s);
}
if(flag == 1){printf("TRUE\n");continue;}
printf("FALSE\n");
}
return 0;
}