骰子涂色

将每一个面朝上都枚举出来,然后在判断以垂直线旋转的四种可能,所以一共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; }
计算机小白记录学习过程,喜欢就点个推荐和关注吧O(∩_∩)O哈哈~

浙公网安备 33010602011771号