2010年3月20日 星期六

Problem 253 Cube painting,立方體旋轉

這題是給你兩塊立方體,而這兩塊立方體各面塗上顏色,問說第一塊的立方體旋轉後會不會與第二塊的各個面顏色相同。以下是顏色對照圖:

從上圖得知,輸入的六種顏色以這種方式排序。以輸入例子 rbgggrrggbgr 來說,第一塊立方體各面顏色為 rbgggr,而第二塊立方體各面顏色為 rggbgr。當比對這兩個立方體要有一點概念,就是當它相對的面與另一塊立方體相對的面比較後(所謂相對的面就是指上圖的 1 與 6、2 與 5、3 與 4),若相同,則相同;若不同,則不同。以下為關鍵程式碼:
while (gets(str))
{
int isTurn = 0, i, j;
c[0].ch1 = str[0], c[0].ch2 = str[5], c[0].isComp = 0;
c[1].ch1 = str[1], c[1].ch2 = str[4], c[1].isComp = 0;
c[2].ch1 = str[2], c[2].ch2 = str[3], c[2].isComp = 0;
c[3].ch1 = str[6], c[3].ch2 = str[11], c[3].isComp = 0;
c[4].ch1 = str[7], c[4].ch2 = str[10], c[4].isComp = 0;
c[5].ch1 = str[8], c[5].ch2 = str[9], c[5].isComp = 0;
for (i = 0; i < 3; i ++)
for (j = 3; j < 6; j ++)
{
if (c[i].isComp == 0 && c[j].isComp == 0)
{
if (c[i].ch1 == c[j].ch1 && c[i].ch2 == c[j].ch2 ||
c[i].ch1 == c[j].ch2 && c[i].ch2 == c[j].ch1)
{
c[i].isComp = 1, c[j].isComp = 1;
break;
}
}
}
for (i = 0; i < 6; i ++)
if (c[i].isComp == 0)
isTurn = 1;
if (isTurn)
printf("FALSE\n");
else printf("TRUE\n");
}

以下是結構程式碼:
struct Cube
{
char ch1;
char ch2;
int isComp;
};

struct Cube c[6];

By David.K

p253題目連結
回ACM題庫目錄
回首頁

沒有留言: