题意是:给出俩正方体着色方案,看俩正方体是否能经过旋转后一致。
思路: 定住任意一个对面(有6种情况,1为上面6为下面为一种情况,6为上1为下另一种情况······),剩下4个面,旋转比较是否有一致的。
很明显我写麻烦了
AC代码:
#include <stdio.h>
#include <stdlib.h>
int same(char a0, char b0, char a1, char b1)
{
return (a0==a1&&b0==b1)||(a0==b1&&b0==a1);
}
int same4(char a[],char b[])
{
int i,j;
for (i=0;i<4;i++)
{
for (j=0;j<4;j++)
if (a[j]!=b[(j+i)%4])
break;
if (j==4) return 1;
}
return 0;
}
int main()
{
char a,b,cube[20],cube1[10],cube2[10],m1[10],m2[10],n[10];
int i,j;
while(gets(cube)!=NULL)
{
for (i=0;i<6;i++)
cube1[i]=cube[i];
for (i=0;i<6;i++)
cube2[i]=cube[i+6];
m1[0]=cube1[1];
m1[1]=cube1[3];
m1[2]=cube1[4];
m1[3]=cube1[2];
m2[0]=cube1[2];
m2[1]=cube1[4];
m2[2]=cube1[3];
m2[3]=cube1[1];
if (same(cube1[0],cube1[5],cube2[0],cube2[5]))
{
n[0]=cube2[1];
n[1]=cube2[3];
n[2]=cube2[4];
n[3]=cube2[2];
if (same4(m1,n)||same4(m2,n))
{
printf("TRUE\n");
continue;
}
}
if (same(cube1[0],cube1[5],cube2[1],cube2[4]))
{
n[0]=cube2[0];
n[1]=cube2[3];
n[2]=cube2[5];
n[3]=cube2[2];
if (same4(m1,n)||same4(m2,n))
{
printf("TRUE\n");
continue;
}
}
if (same(cube1[0],cube1[5],cube2[2],cube2[3]))
{
n[0]=cube2[0];
n[1]=cube2[1];
n[2]=cube2[5];
n[3]=cube2[4];;
if (same4(m1,n)||same4(m2,n))
{
printf("TRUE\n");
continue;
}
}
printf("FALSE\n");
}
return 0;
}