现在的位置: 首页 > 综合 > 正文

习题4-4 骰子涂色 UVa253

2018年04月29日 ⁄ 综合 ⁄ 共 1391字 ⁄ 字号 评论关闭

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



抱歉!评论已关闭.