UVA253 骰子涂色

此题的解题思路与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都运用到长方体有对应的三对面,只要按照一定的顺序排列,两个相同的长方体对应的地方必定会相同。
如有纰漏错误,望指出。

 

posted @ 2017-02-08 17:13  ZackBee  阅读(209)  评论(0编辑  收藏  举报