1.题目描述:点击打开链接
2.解题思路:设计一个标准化的正方体放置方式,比较标准化处理后的两个正方体各个面是否都一样。标准为:第1,6面字母之和最小,第2,5面和居中,第3,4面和最大。且1,2,3面的字母小于6,5,4面的字母。
3.代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<math.h>
#include<stdlib.h>
#define max 20
char a[max];
int b[10];
int c[10];
void convert(int n)//n为起始位置,n==0时调用数组b,n==6时调用数组c
{
if (n == 0)
{
int arr[4][2];
for (int i = 0; i < 3; i++)
{
arr[i][0] = a[i] + a[5 - i];
arr[i][1] = i;
}
for (int i = 0; i <= 1;i++)
for (int j = i + 1; j <= 2;j++)
if (arr[j][0] < arr[i][0])
{
arr[3][0] = arr[i][0];
arr[3][1] = arr[i][1];
arr[i][0] = arr[j][0];
arr[i][1] = arr[j][1];
arr[j][0] = arr[3][0];
arr[j][1] = arr[3][1];
}
for (int i = 0; i < 3; i++)
{
if (a[arr[i][1]] < a[5 - arr[i][1]])
{
b[i] = a[arr[i][1]];
b[5 - i] = a[5 - arr[i][1]];
}
else
{
b[5 - i] = a[arr[i][1]];
b[i] = a[5 - arr[i][1]];
}
}
}
else if (n == 6)
{
int arr[4][2];
for (int i = 0; i < 3; i++)
{
arr[i][0] = a[6 + i] + a[11 - i];
arr[i][1] = 6 + i;
}
for (int i = 0; i <= 1; i++)
for (int j = i + 1; j <= 2; j++)
if (arr[j][0] < arr[i][0])
{
arr[3][0] = arr[i][0];
arr[3][1] = arr[i][1];
arr[i][0] = arr[j][0];
arr[i][1] = arr[j][1];
arr[j][0] = arr[3][0];
arr[j][1] = arr[3][1];
}
for (int i = 0; i < 3; i++)
{
if (a[arr[i][1]] < a[17 - arr[i][1]])
{
c[i] = a[arr[i][1]];
c[5 - i] = a[17 - arr[i][1]];
}
else
{
c[5 - i] = a[arr[i][1]];
c[i] = a[17 - arr[i][1]];
}
}
}
}
int main()
{
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
while (scanf("%s", a) != EOF)
{
int flag = 1;
convert(0);
convert(6);
for (int i = 0; i < 6; i++)
if (b[i] != c[i])
{
flag = 0;
break;
}
if (flag) printf("TRUE\n");
else printf("FALSE\n");
}
return 0;
}