骰子涂色

 

将每一个面朝上都枚举出来,然后在判断以垂直线旋转的四种可能,所以一共6*4种可能

代码如下:

#include<cstdio>
#include<iostream>
using namespace std;
#include<cstdlib>
#include<cstring>

int sta[6][6] = { {1,2,3,4,5,6},{2,6,3,4,1,5},{5,1,3,4,6,2},{4,2,1,6,5,3},{3,2,6,1,5,4},{6,2,4,3,5,1} };
//int sta[6][6] = { {1,2,3,4,5,6},{2,1,4,3,6,5},{3,1,2,5,6,4},{4,1,5,2,6,3},{5,1,3,4,6,2},{6,2,4,3,5,1} };

void rotat(char a[])
{
    char m[7];
    memcpy(m, a, sizeof(m));
    a[2] = m[3];
    a[4] = m[2];
    a[5] = m[4];
    a[3] = m[5];
}

int cir(char a[], char b[])
{
    for (int i = 1; i < 7; i++)
    {
        if (a[i] != b[i]) return 0;
    }
    return 1;
}

int main(void)
{
    char a[7], b[7];
    char aa[7], bb[7];
    while (scanf("%6c%6c",a,b) == 2)
    {
        getchar();
        for (int i = 6; i > 0; i--)
        {
            a[i] = a[i - 1];
            b[i] = b[i - 1];
        }
        memcpy(aa, a, sizeof(a));
        int q = 0;
        for (int i = 0; i < 6; i++)
        {
            for (int j = 0; j < 6; j++)  a[j] = aa[sta[i][j]];
            for (int j = 6; j > 0; j--)  a[j] = a[j - 1];
            if (cir(a, b))
            {
                q = 1; break;
            }
            for (int j = 0; j < 4; j++)
            {
                rotat(a);
                if (cir(a, b))
                {
                    q = 1; break;
                }
            }
            if (q) break;
        }
        if (q) printf("TRUE\n");
        else  printf("FALSE\n");
    }
    return 0;
}

 

posted @ 2021-02-01 18:33  loliconsk  阅读(147)  评论(0)    收藏  举报