Q253: Cube painting
我們想要為方塊塗上顏色,我們有三種顏色:藍色、紅色、綠色。方塊的每一面塗上其中一種顏色。現在,我們把方塊的6個面以1~6來編號,如下圖Figure 1:
因為一個方塊有6面,所以我們有36=729種不同的方式來塗方塊。然而當我們忽略面上的編號時,不同塗方塊的方式就會少很多,那是因為方塊可以旋轉的緣故。請看以下的例子:我們以6個字元來表達一個方塊6個面上塗的顏色(字元為b,r,g其中之一,分別代表blue, red, green)。第i個字元代表第i面上的顏色,例如下圖Figure 2就是rbgggr的圖,Figure 3就是rggbgr的圖。請注意:Figure 2 和 Figure 3其實塗色的方式是一樣的,如果我們把Figure 2的方塊繞垂直方向向右轉90度,就變成Figure 3中的方塊了。
Input
每組測試資料一列。每列有12個字元。前6個字元代表一個方塊,後6個字元代表另一個方塊。你的程式必須判斷這2個方塊是否塗色的方式是一樣的,也就是說,是否可以經由旋轉的方式,使一個方塊變成另一個。
Output
對每組測試資料輸出一列。如果第一個方塊可以旋轉而變成第二個方塊,則輸出TRUE,否則輸出FALSE。
Sample Input
rbgggrrggbgr rrrbbbrrbbbr rbgrbgrrrrrg
Sample Output
TRUE FALSE FALSE
求两个正方体的带有的颜色是否相同。
最少2次旋转就可以得到12种情况。
#include<iostream> #include<stdio.h> using namespace std; int main() { int i, j; char c1[7], c2[7], str[13]; while(scanf("%s", str)!=EOF) { for (i=0; i<6; i++) c1[i]=str[i]; for (; i<12; i++) c2[i-6]=str[i]; int ct; for (i=0; i<3; i++) { ct=0; for (j=0; j<6; j++) { if (c1[i] == c2[j] && c1[5-i] == c2[5-j]) { ct=1; c2[j]='0'; c2[5-j]='0'; break; } } if (!ct) break; } if (!ct) { cout << "FALSE" << endl; continue; } cout << "TRUE" << endl; } return 0; }