這題在思考的時候,花了相當長的時間思考,除了對應面相等之外,還有什麼條件才能保證相等,之前也考慮過,如果兩對相等,一對相反怎麼辦,不過好像並沒有遇到這種情況。
不過,之前沒有考慮到一種情況:兩對面全部是相等的顏色,一對是兩種不同的顏色。最初的寫法是,在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;
}