1. 程式人生 > >演算法競賽入門經典 UVa253 Cube painting

演算法競賽入門經典 UVa253 Cube painting

這題在思考的時候,花了相當長的時間思考,除了對應面相等之外,還有什麼條件才能保證相等,之前也考慮過,如果兩對相等,一對相反怎麼辦,不過好像並沒有遇到這種情況。

不過,之前沒有考慮到一種情況:兩對面全部是相等的顏色,一對是兩種不同的顏色。最初的寫法是,在i,j面相等時,(7-i)與(7-j)不等就直接判斷F。這樣就出現錯誤了。最後乾脆直接把判斷放在最後輸出時。

#include<stdio.h>
#include<string.h>

int main()
{
	char zifu1[13],zifu2[7];
	while(~scanf("%s",zifu1))
	{//字元輸入與調整 
	int k=5;
		for(int i=6,j =1;i<strlen(zifu1);i++,j++)
		{
			zifu2[j] = zifu1[i];
			zifu1[k+1] = zifu1[k];
			k--;
		}
		zifu1[0] = ' ';
		zifu2[0] = ' ';
		
		int flag1[7],flag2[7]; //標記字串
		memset(flag1,0,sizeof(flag1));
		memset(flag2,0,sizeof(flag2));
		for(int i =1;i<=6;i++)
		 for(int j =1;j<=6;j++)
		 {
		 	if(zifu1[i] == zifu2[j])
		 	{
		 		if(flag2[j] == 1)
		 		continue;
				 if(zifu1[7-i] == zifu2[7-j])
				{
					if(flag1[i] == 0 && flag1[7-i] == 0 && flag2[j] ==0 && flag2[7-j] == 0)
		 			{
		 				flag1[i] = flag1[7-i] = flag2[j] = flag2[7-j] = 1;
		 				break;
					 }
					 
		 			else
		 			continue;
				}
			 }
		 }
		for(int i =1;i<=6;i++)
		{
			flag1[0] += flag1[i];
			flag2[0] += flag2[i];
		}
		
		if(flag1[0] == 6 && flag2[0] == 6)
		printf("TRUE\n");
		else
		printf("FALSE\n");
	}
	return 0;
 }