Cube painting UVA - 253

本文介绍了一个使用C++解决两个筛子颜色配对问题的算法。通过记录每个筛子的红、蓝、绿颜色数量并进行比较,确保颜色数量匹配。进一步通过两层循环检查筛子面的对应关系,确保所有面都正确配对,从而判断两个筛子是否完全相同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#  include <bits/stdc++.h>
using namespace std;
int c1[3],c2[3];
int main ()
{
	string s;
	while (cin>>s)
	    {
	     	memset (c1,0,sizeof(c1));
	     	memset (c2,0,sizeof(c2));
	     	int flag=0;
	     	for (int i=0;i<6;++i)  //来记录r,b,g每一块各有几个,要保证颜色的个数对应相等. 
	     	    {
	     	      if (s[i]=='r') c1[0]++;
				  if (s[i]=='b') c1[1]++;
				  if (s[i]=='g') c1[2]++;	
			    }
			for (int i=6;i<12;++i)
	     	    {
	     	      if (s[i]=='r') c2[0]++;
				  if (s[i]=='b') c2[1]++;
				  if (s[i]=='g') c2[2]++;	
			    }
			for (int i=0;i<3;++i)  //对应的颜色块不相等就直接break掉,标记一下。 
			   	if (c1[i]!=c2[i])
			   	    {
			   	        flag=1;
					    break;	
					}
			if (flag) 
			    {
			  	    printf ("FALSE\n");
			  	    continue;
			    }
			int p;
			for (int k=6,q=11;k<q;k++,q--)//外循环是循环后面一个筛子对应的面 
			    {
			   	    p=0;
			   	    for (int i=0,j=5;i<j;i++,j--)//内循环是前面一个筛子对应的面 
			   	        {
			   	          if (!((s[i]==s[k]&&s[j]==s[q])||(s[i]==s[q]&&s[j]==s[k])))
			   	    //这个条件的设置因人而异,我这里是判断的两种对应情况都不相等的。 
                            {	
                              p++;
						    }
					    }
				    if (p==3) //如果p等于3,意味着有一面后面与前面的不对应 
				       {
				   	    flag=1;
				   	    break;
					    } 
			   }
      	    if (flag)
			   printf ("FALSE\n");
			else
			  printf ("TRUE\n");  
		}
	return 0;	 
} 

水一题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值