#include<iostream>
#include<cstdio>
using namespace std;
int main ()
{
char a[6], b[6], c[13];
while(gets(c))
{
for(int i = 0; i < 12; i++)
{
if(i<6)
a[i] = c[i];
else
b[11-i] = c[i];
}
int flag = 1;
for(int i = 0; flag&&i < 3; i++)
{
for(int j = 0; flag && j < 6; j++)
{
if(a[i] == b[j]&& a[5-i] == b[5-j])
{
b[j] = 0;
b[5-j] = 0;
break;
}
else if(j == 5)
{
cout<<"FALSE"<<endl;
flag = 0;
}
}
}
if(flag)cout<<"TRUE"<<endl;
}
return 0;
}
该题我开始的时候还是没思路,但看到人家做的。才觉得简单,坏了。我养成看人家结题报告的原因了。
这个题又两种解法
一种是穷举法
可以列举12中然后逆转,也可以列举24种,但我列举12种,逆转的时候,不只是单纯的逆转,而是3和4交换,也就是数组里的2和3要交换,这是规律
第二种是相对面不变法;
用gets()的时候忘了c字符串有结尾了,至少应定义为13,导致了三次的runtime error!!!
#include <iostream>
#include <cstdio>
using namespace std;
int main ()
{
const int d[][6]= {{1,2,3,4,5,6},{1,3,5,2,4,6},{1,4,2,5,3,6},{1,5,4,3,2,6},
{2,1,4,3,6,5},{2,3,1,6,4,5},{2,4,6,1,3,5},{2,6,3,4,1,5},
{3,1,2,5,6,4},{3,2,6,1,5,4},{3,5,1,6,2,4},{3,6,5,2,1,4}
};
char a[6], b[6],c[13];
while(gets(c))
{
for(int i = 0; i < 12; i++)
{
if(i<6)
a[i] = c[i];
else
b[i-6] = c[i];
}
int flag = 0;
for(int i = 0; i < 12; i++)
{
for(int j = 0; j < 6; j++)
{
if(b[j] == a[d[i][j]-1])
{
flag ++;
}
}
if(flag == 6)break;
//else flag = 0;
else
{
flag = 0;
int s[6];
for(int j = 0; j < 6; j++)
s[j] = a[d[i][j]-1];
int temp = s[2];
s[2] = s[3];
s[3] = temp;
for(int j = 0; j < 6; j++)
{
if(b[5-j] == s[j])
{
flag ++;
}
}
if(flag == 6)break;
else flag = 0;
}
}
if(flag==6)cout<<"TRUE"<<endl;
else cout<<"FALSE"<<endl;
}
return 0;
}