1 条题解
-
0
问题分析
本题要求判断给定的卡片组中是否存在 “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
- 上传者