题目:有两个正方体,每个面都涂上颜色,问两个正方体能否经过旋转变的相同。
分析:模拟。建立三个旋转方向上,每个面转后对应的面的编号的映射,
每个方向可以旋转4次回到原来状态,枚举所有旋转状态进行模拟。
说明:╮(╯▽╰)╭每个方向转4次,开始竟然写成了6次╮(╯▽╰)╭。
#include <iostream>
#include <cstdlib>
using namespace std;
char map[3][7] = {"263415","135246","326154"};
char A[6],B[6];
int same( char *a, char *b )
{
for ( int i = 0 ; i < 6 ; ++ i )
if ( a[i] != b[i] )
return 0;
return 1;
}
int move( char *a, int p )
{
char C[6];
for ( int i = 0 ; i < 6 ; ++ i )
C[i] = a[i];
for ( int i = 0 ; i < 6 ; ++ i )
a[i] = C[map[p][i]-'1'];
}
int main()
{
while ( cin >> A[0] ) {
for ( int i = 1 ; i < 6 ; ++ i )
cin >> A[i];
for ( int i = 0 ; i < 6 ; ++ i )
cin >> B[i];
int flag = 0;
for ( int i = 0 ; i < 4 ; ++ i ) {
for ( int j = 0 ; j < 4 ; ++ j ) {
for ( int k = 0 ; k < 4 ; ++ k ) {
if ( same( A, B ) ) flag = 1;
move( B, 2 );
}
move( B, 1 );
}
move( B, 0 );
}
if ( flag ) cout << "TRUE" << endl;
else cout << "FALSE" << endl;
}
return 0;
}