演算法競賽入門經典 UVa253 Cube painting
阿新 • • 發佈:2019-01-25
這題在思考的時候,花了相當長的時間思考,除了對應面相等之外,還有什麼條件才能保證相等,之前也考慮過,如果兩對相等,一對相反怎麼辦,不過好像並沒有遇到這種情況。
不過,之前沒有考慮到一種情況:兩對面全部是相等的顏色,一對是兩種不同的顏色。最初的寫法是,在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; }