算法竞赛入门经典 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;
 } 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值