正常思路应该是列举所有的旋转情况再做判断
我的思路比较清奇。。。因为16,25,34相对,就像先把串分成两组,表示相对的2个顶点,将一个角与前面一一对应后再比较对面是否一样。
写起来也比较长??
//Cube painting
#include<iostream>
char a[7], b[7];
int compare(int i, int j, int k);
int check(int i, int j, int k);
int p[4];
using namespace std;
int compare(int i, int j, int k)
{
p[4] = {};
if (a[1] == b[i])
{
p[i] = i;
if (a[2] == b[j])
{
p[2] = j;
if (a[3] == b[k])p[3] = k;
}
else if (a[2] == b[k])
{
p[2] = k;
if (a[3] == b[j])p[3] = j;
}
}
else if (a[1] == b[j])
{
p[1] = j;
if (a[2] == b[i])
{
p[2] = i;
if (a[3] == b[k])p[3] = k;
}
else if (a[2] == b[k])
{
p[2] = k;
if (a[3] == b[i])p[3] = i;
}
}
else if (a[1] == b[k])
{
p[1] = k;
if (a[2] == b[i])
{
p[2] = i;
if (a[3] == b[j])p[3] = j;
}
else if (a[2] == b[j])
{
p[2] = j;
if (a[3] == b[i])p[3] = i;
}
}
if (p[1] && p[2] && p[3])return 1;
else return 0;
}
int check(int i, int j, int k)
{
int out = 1;
if (a[6] != b[7 - i])out = 0;
else if (a[5] != b[7 - j])out = 0;
else if (a[4] != b[7 - k])out = 0;
return out;
}
int main()
{
for (int i = 1; i < 7; i++)cin >> a[i];
for (int i = 1; i < 7; i++)cin >> b[i];
int ans = 0;
if (compare(1, 2, 3)) ans += check(p[1], p[2], p[3]);
else if (compare(1, 2, 3)) ans += check(p[1], p[2], p[3]);
else if (compare(6, 2, 3)) ans += check(p[1], p[2], p[3]);
else if (compare(1, 5, 3)) ans += check(p[1], p[2], p[3]);
else if (compare(1, 2, 4)) ans += check(p[1], p[2], p[3]);
else if (compare(6, 5, 3)) ans += check(p[1], p[2], p[3]);
else if (compare(1, 5, 4)) ans += check(p[1], p[2], p[3]);
else if (compare(6, 2, 4)) ans += check(p[1], p[2], p[3]);
else if (compare(6, 5, 4)) ans += check(p[1], p[2], p[3]);
if (ans)cout << "TRUE";
else cout << "FALSE";
}
学习一下别人的代码。。。