1 条题解

  • 0
    @ 2025-5-13 11:13:33

    问题分析

    本题要求判断给定的卡片组中是否存在 “Set”(即满足每个特征要么在三张卡片上完全相同,要么在三张卡片上完全不同的三张卡片组合),并输出所有的 “Set” 组合。输入的卡片通过四个字符表示其符号、数量、颜色和阴影特征。

    方法思路

    读取输入:按行读取卡片信息,每个卡片由四个字符组成,分别表示符号、数量、颜色和阴影。不同桌面布局之间由空行分隔,输入以文件结束符结束。 生成所有卡片组合:对于每个桌面布局,生成所有可能的三张卡片的组合。 判断组合是否为 “Set”:对于每个组合,检查其四个特征(符号、数量、颜色、阴影)是否满足 “Set” 的条件,即每个特征要么在三张卡片上完全相同,要么在三张卡片上完全不同。 输出结果:如果存在 “Set” 组合,按指定格式输出所有的 “Set” 组合;如果不存在,则输出 “*** None Found ***”。

    代码实现

    #include <iostream>
    using namespace std;
    //POJ 能通过 百炼wa 
    int main()
    {
    	while(1)
    	{
    		string s[12];
    		cin>>s[0];
    		if(cin.eof()==1)
    		{
    			break;
    		}
    		for(int i=1;i<12;i++)
    		{
    			cin>>s[i];
    		}
    		cout<<"CARDS: ";
    		for(int i=0;i<12;i++)
    		{
    			cout<<" "<<s[i];
    		}
    		cout<<endl;
    		int js=0;
    		int jl=0;
    		for(int i=0;i<12;i++)
    		{
    			for(int j=i+1;j<12;j++)
    			{
    				for(int k=j+1;k<12;k++)
    				{
    					int flag=0;
    					for(int h=0;h<4;h++)
    					{
    						if((s[i][h]==s[j][h] && s[i][h]==s[k][h])||(s[i][h]!=s[j][h]&&s[i][h]!=s[k][h]&&s[j][h]!=s[k][h]))
    						{
    							
    						}else
    						{
    							flag=1;
    						}
    					}
    					if(flag==0)
    					{
    						js++;
    						if(js==1)
    						{
    							jl=1;
    							cout<<"SETS:   1.  ";
    							cout<<s[i]<<" "<<s[j]<<" "<<s[k]<<endl;
    						}else//""
    						{
    							//printf("%9d",js);
    							cout<<"        ";        
    							cout<<js<<".  "<<s[i]<<" "<<s[j]<<" "<<s[k]<<endl;
    						}
    					}
    				}
    			}
    		}
    		if(jl==0)
    		{
    			cout<<"SETS:   *** None Found ***"<<endl;//
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    
    
    • 1

    信息

    ID
    54
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者