如果一个骰子经过旋转可以得到另一个骰子,那么这两个骰子就是等价的。
骰子可以往三个方向旋转,如图所示,分别是沿x轴,沿y轴,沿z轴。所以只要编写三个旋转函数即可。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int cmp();//判断两个骰子是否等价
void y();//沿y轴旋转
void x();//沿x轴旋转
void z();//沿z轴旋转
char a[8],b[8];//用两个数组存储骰子
int main(void)
{
char c[20];
int i,j;
k: while (scanf("%s",c)!=0)
{
if (getchar() == EOF)return 0;
for (i = 1; i <= 6; i++)a[i] = c[i-1];
for (i = 1; i <= 6; i++)b[i] = c[i+6-1];
for (i = 1; i <= 4; i++)
{
y();
for (j = 1; j <= 4; j++)
{
x();
for (int u = 1; u <= 4; u++)
{
z(); if (cmp()) { printf("TRUE\n"); goto k; }
}
}
}printf("FALSE\n");
}
return 0;
}
int cmp()
{
for (int i = 1; i <= 6; i++)
{
if (a[i] != b[i])return 0;
}
return 1;
}
void y()//沿y轴旋转时,3、6、4、1面交换位置
{
char p = a[3]; a[3] = a[6]; a[6] = a[4]; a[4] = a[1]; a[1] = p;
}
void x() {
char p = a[5]; a[5] = a[6]; a[6] = a[2]; a[2] = a[1]; a[1] = p;
}
void z()
{
char p = a[3]; a[3] = a[5]; a[5] = a[4]; a[4] = a[2]; a[2] = p;
}