习题4-4 骰子涂色 UVa253

来源:互联网 发布:伺服编码器数据乱跳 编辑:程序博客网 时间:2024/06/04 18:19

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


0 0
原创粉丝点击