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; }