uva 253 - Cube painting

来源:互联网 发布:mac dock栏移除图标 编辑:程序博客网 时间:2024/04/19 15:09

1,2,3,4,5,6六个面分别朝上  判断是否匹配    不匹配则顺时针旋转总共三次   每次都要判断是否匹配  

总共24种状态   每种状态判断一遍    满足就输出TRUE   否则输出FALSE

哎  代码写得好搓

#include<cstdio>#include<cstring>int rot_up(char *p)//返回1说明完全匹配了{    char q[4];    q[0] = p[6];q[1] = p[7];q[2] = p[10];q[3] = p[11];    p[6] = q[1];p[7] = q[3];p[10] = q[0];p[11] = q[2];    for(int i = 0; i < 6;i++)        if(p[i] != p[i+6])return 0;    return 1;}int  rot_right(char *p){    char q[4];    q[0] = p[7];q[1] = p[8];q[2] = p[9];q[3] = p[10];    p[7] = q[2];p[8] = q[0];p[9] = q[3];p[10] =q[1];    for(int i = 0; i < 6;i++)        if(p[i] != p[i+6])return 0;    return 1;}int main(){    #ifdef LOCAL    freopen("in.txt","r",stdin);    #endif // LOCAL    char str[15];    while(gets(str)!=NULL)    {        int i,flag = 0;        for(i = 0; i < 6;i++)            if(str[i] != str[i+6])break;        if(i == 6){printf("TRUE\n");continue;}        char s[15];        strcpy(s,str);        for(i = 0; i < 3&&flag!=1; i++)            if(rot_right(s))flag = 1;        if(flag == 1){printf("TRUE\n");continue;}        for(i = 0; i < 4&&flag!=1; i++)//3面朝上        {            if(i == 0)flag = rot_up(s);            else flag = rot_right(s);        }        if(flag == 1){printf("TRUE\n");continue;}        strcpy(s,str);        for(i = 0; i < 4&&flag!=1; i++)//2面朝上        {            if(i == 0)flag = rot_up(s);            else flag = rot_right(s);        }        if(flag == 1){printf("TRUE\n");continue;}        strcpy(s,str);        //4面朝上        flag = rot_right(s);        if(flag == 1){printf("TRUE\n");continue;}        for(i = 0; i < 4&&flag!=1; i++)        {            if(i == 0)flag = rot_up(s);            else flag = rot_right(s);        }        if(flag == 1){printf("TRUE\n");continue;}        //5面朝上        strcpy(s,str);        if(rot_right(s)){printf("TRUE\n");continue;}        if(rot_right(s)){printf("TRUE\n");continue;}        for(i = 0; i < 4&&flag!=1; i++)        {            if(i == 0)flag = rot_up(s);            else flag = rot_right(s);        }        if(flag == 1){printf("TRUE\n");continue;}        //6面朝上        strcpy(s,str);        if(rot_up(s)){printf("TRUE\n");continue;}        for(i = 0; i < 4&&flag!=1; i++)        {            if(i == 0)flag = rot_up(s);            else flag = rot_right(s);        }        if(flag == 1){printf("TRUE\n");continue;}        printf("FALSE\n");    }    return 0;}