这个题是比较两个正方体涂得颜色是否一致。让一个正方体不动,另一个转,总共有6个面,每个面4种情况,一一列举便可求出。
例如:123456 1和6分别为顶和底不变,绕其顺时针转动可分别得:142536 154326 135246 通过观察发现:旋转实际是在交换数的位置,而且这种交换是有规律的。我们可以同时交换0和5, 1和4, 2和3中的两个,例如交换1和4, 2和3,便得上式中的第二个;也可以交换们其中一个位置,如2和3,然后再交换1和2, 3和4,便得上式中的第一个,其余都类似。代码比较麻烦。
程序代码:
#include<iostream> #include<string> #include<cstdio> using namespace std; string Cube; void ChSwap(char & a, char &b) { char c = a; a = b; b = c; } int IsEqual(string str) { string s = str; if(s == Cube) return 1; ChSwap(s[1], s[4]); ChSwap(s[2], s[3]); if(s == Cube) return 1; ChSwap(s[2], s[3]); ChSwap(s[1], s[2]); ChSwap(s[3], s[4]); if(s == Cube) return 1; ChSwap(s[1], s[4]); ChSwap(s[2], s[3]); if(s == Cube) return 1; return 0; } int main() { int flag; string input, s; //freopen("input.txt", "r", stdin); while(cin>>input){ flag = 0; Cube.assign(input, 6, 6); input.erase(6); if(input[0] == Cube[0] && input[5] == Cube[5]){ if(IsEqual(input)) flag = 1; } if(!flag && input[5] == Cube[0] && input[0] == Cube[5]){ s = input; ChSwap(s[0], s[5]); ChSwap(s[1], s[4]); if(IsEqual(s)) flag = 1; } if(!flag && input[1] == Cube[0] && input[4] == Cube[5]){ s = input; ChSwap(s[0], s[5]); ChSwap(s[0], s[1]); ChSwap(s[4], s[5]); if(IsEqual(s)) flag = 1; } if(!flag && input[4] == Cube[0] && input[1] == Cube[5]){ s = input; ChSwap(s[1], s[4]); ChSwap(s[0], s[1]); ChSwap(s[4], s[5]); if(IsEqual(s)) flag = 1; } if(!flag && input[2] == Cube[0] && input[3] == Cube[5]){ s = input; ChSwap(s[0], s[5]); ChSwap(s[0], s[2]); ChSwap(s[3], s[5]); if(IsEqual(s)) flag = 1; } if(!flag && input[3] == Cube[0] && input[2] == Cube[5]){ s = input; ChSwap(s[2], s[3]); ChSwap(s[0], s[2]); ChSwap(s[3], s[5]); if(IsEqual(s)) flag = 1; } if(flag) cout<<"TRUE"<<endl; else cout<<"FALSE"<<endl; } return 0; }