一开始判断里面没加break;那就有一个疑问rbbbbr和grrrrr也是TRUE,因为我用vis来标记cube2的每一组面只判断一次,那面break就保证了cube1也只判断了一次,如果遇到相同就继续下一组的判断。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef struct{
char c1,c2;
int vis;
}color;
color cube1[30],cube2[30];
void into(char color[120])
{
for(int i=0;i<3;i++)
{
cube1[i].c1=color[i];
cube1[i].c2=color[5-i];
}
int j=6,k=11;
for(int i=0;i<3;i++)
{
cube2[i].c1=color[j++];
cube2[i].c2=color[k--];
}
}
int judge()
{
char m,n,p,q;
int cnt=0;
for(int i=0;i<3;i++)
{
cube1[i].vis=0;
cube2[i].vis=0;
}
for(int i=0;i<3;i++)
{
m=cube1[i].c1;
n=cube1[i].c2;
for(int j=0;j<3;j++)
{
p=cube2[j].c1;
q=cube2[j].c2;
if(((m==p&&n==q)||(m==q&&n==p))&&cube2[j].vis==0)
{
cnt++;
cube2[j].vis=1;
break;
}
}
}
return cnt;
}
int main()
{
char color[120];
while(scanf("%s",color)!=EOF)
{
int ok;
into(color);
ok=judge();
if(ok==3) printf("TRUE\n");
else printf("FALSE\n");
}
return 0;
}