这题在思考的时候,花了相当长的时间思考,除了对应面相等之外,还有什么条件才能保证相等,之前也考虑过,如果两对相等,一对相反怎么办,不过好像并没有遇到这种情况。
不过,之前没有考虑到一种情况:两对面全部是相等的颜色,一对是两种不同的颜色。最初的写法是,在i,j面相等时,(7-i)与(7-j)不等就直接判断F。这样就出现错误了。最后干脆直接把判断放在最后输出时。
#include<stdio.h>
#include<string.h>
int main()
{
char zifu1[13],zifu2[7];
while(~scanf("%s",zifu1))
{//字符输入与调整
int k=5;
for(int i=6,j =1;i<strlen(zifu1);i++,j++)
{
zifu2[j] = zifu1[i];
zifu1[k+1] = zifu1[k];
k--;
}
zifu1[0] = ' ';
zifu2[0] = ' ';
int flag1[7],flag2[7]; //标记字符串
memset(flag1,0,sizeof(flag1));
memset(flag2,0,sizeof(flag2));
for(int i =1;i<=6;i++)
for(int j =1;j<=6;j++)
{
if(zifu1[i] == zifu2[j])
{
if(flag2[j] == 1)
continue;
if(zifu1[7-i] == zifu2[7-j])
{
if(flag1[i] == 0 && flag1[7-i] == 0 && flag2[j] ==0 && flag2[7-j] == 0)
{
flag1[i] = flag1[7-i] = flag2[j] = flag2[7-j] = 1;
break;
}
else
continue;
}
}
}
for(int i =1;i<=6;i++)
{
flag1[0] += flag1[i];
flag2[0] += flag2[i];
}
if(flag1[0] == 6 && flag2[0] == 6)
printf("TRUE\n");
else
printf("FALSE\n");
}
return 0;
}