此题的解题思路与UVA1587类似,排序后对应的面的字符会是相同的。
给出sample input&output。
rbgggrrggbgr
rrrbbbrrbbbr
rbgrbgrrrrrg
TRUE
FALSE
FALSE
#include<stdio.h>
struct cube
{
int x,y;
};
struct cube s1[5],s2[5];
char a[15];
char max(char a,char b)
{
return a>b?a:b;
}
char min(char a,char b)
{
return a<b?a:b;
}
void sort(struct cube s[])
{
int i,j,mark,tempx,tempy;
for(i=0;i<3;i++){
mark=i;
for(j=i+1;j<3;j++){
if(s[mark].x>s[j].x){
mark=j;
}
}
if(mark!=i){
tempx=s[i].x; tempy=s[i].y;
s[i].x=s2[mark].x; s[i].y=s[mark].y;
s[mark].x=tempx; s[mark].y=tempy;
}
}
}
int main()
{
int i,mark;
while(scanf("%s",a)==1){ //将对应的面的ascii码排序后
s1[0].x=min(a[0],a[5]); //存储到x,y。
s1[0].y=max(a[0],a[5]);
s1[1].x=min(a[1],a[3]);
s1[1].y=max(a[1],a[3]);
s1[2].x=min(a[2],a[4]);
s1[2].y=max(a[2],a[4]);
s2[0].x=min(a[6],a[11]);
s2[0].y=max(a[6],a[11]);
s2[1].x=min(a[7],a[9]);
s2[1].y=max(a[7],a[9]);
s2[2].x=min(a[8],a[10]);
s2[2].y=max(a[8],a[10]);
sort(s1); sort(s2); //以x为排序对象对3对对应的面进行排序
for(mark=1,i=0;i<3;i++){ //经过了两次排序后,对应的位置应该相同
if(s1[i].x!=s2[i].x || s1[i].y!=s2[i].y){
mark=0;
break;
}
}
if(mark)
printf("TRUE\n");
else
printf("FALSE\n");
}
}
此题与UVA1587都运用到长方体有对应的三对面,只要按照一定的顺序排列,两个相同的长方体对应的地方必定会相同。
如有纰漏错误,望指出。