依然是暴力枚举。总共才6个面,套娃套3次就便遍历完了。但是感觉有多余的。。。。。
更简单的方法欢迎分享
#include<iostream>
#include<string>
using namespace std;
int main()
{
string sd;
while(cin>>sd)
{
int t = 0;
string ss(sd.begin()+6,sd.end());
string sa(sd.begin(),sd.begin()+6);
for(int i = 0;i<4 && !t;++i)
{
string sc1 = sa;
char cc[4];
cc[0] = sc1[0];
cc[1] = sc1[1];
cc[2] = sc1[5];
cc[3] = sc1[4];
string sr3 = cc;
for(int j = 0;j<4;++j)
{
cc[j] = sr3[(j+i)%4];
}
sc1[0] = cc[0];
sc1[1] = cc[1];
sc1[5] = cc[2];
sc1[4] = cc[3];
if(sc1 == ss)
{
t = 1;
break;
}
for(int k = 0;k<4 && !t;++k)
{
string sc2;
sc2 = sc1;
char cb[4];
cb[0] = sc2[0];
cb[1] = sc2[3];
cb[2] = sc2[5];
cb[3] = sc2[2];
string sr2 = cb;
for(int p = 0;p<4;++p)
{
cb[p] = sr2[(p+k)%4];
}
sc2[0] = cb[0];
sc2[3] = cb[1];
sc2[5] = cb[2];
sc2[2] = cb[3];
if(sc2 == ss)
{
t = 1;
break;
}
for(int l = 0;l<4 && !t;++l)
{
string sc3;
sc3 = sc2;
char cd[4];
cd[0] = sc3[1];
cd[1] = sc3[3];
cd[2] = sc3[4];
cd[3] = sc3[2];
string sr1 = cd;
for(int m = 0;m<4;++m)
{
cd[m] = sr1[(m+l)%4];
}
sc3[1] = cd[0];
sc3[3] = cd[1];
sc3[4] = cd[2];
sc3[2] = cd[3];
if(sc3 == ss)
{
t = 1;
break;
}
}
}
}
if(t)
cout<<"TRUE"<<endl;
else
cout<<"FALSE"<<endl;
}
}