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;
}

浙公网安备 33010602011771号