题目链接:UVA 253
题目大意:以“上正左右背下”的顺序为正方体编号1-6,为正方体各个面上“r、g、b”三种颜色,给定一个长度为12的字符串,前六位为某一正方体对应六个面的颜色,判断能否经过旋转将该正方体六个面颜色的顺序转换为后六位对应正方体的颜色顺序。
网上的代码有许多都是模拟旋转过程,但是对于正方体来说,不论怎样旋转,其对面上的颜色对应不会变。代码如下:
#include <iostream>
#include <cstring>
using namespace std;
const int N=1024;
int book[N];
int main()
{
string s;
while(cin>>s)
{
bool flag=true;
memset(book,0,sizeof(book));
//记录第一个正方体对面的对应颜色
int sum1=s[0]+s[5];
int sum2=s[1]+s[4];
int sum3=s[2]+s[3];
book[sum1]++,book[sum2]++,book[sum3]++;
//记录第二个正方体对面的对应颜色
sum1=s[0+6]+s[5+6];
sum2=s[1+6]+s[4+6];
sum3=s[2+6]+s[3+6];
book[sum1]--,book[sum2]--,book[sum3]--;
//若两正方体对面的对应颜色相同,则说明可以经过旋转得到。
for(int i=0;i<N;i++)
if(book[i])
flag=false;
if(flag)
cout<<"TRUE"<<endl;
else
cout<<"FALSE"<<endl;
}
return 0;
}