UVa 253 Cube painting

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;
 }
原文地址:https://www.cnblogs.com/UnGeek/p/2623397.html