题目来源:http://poj.org/problem?id=1053

题目大意:

  有一种牌,共有81张。每张牌有四个属性,每种属性有三种可能取值:形状(D,O,S),数字(1,2,3),颜色(R,G,P),纹理(O,F,S)。如果三张牌的的任意一种属性都满足:三张牌的该属性值均相同或各不相同,则成这三张牌可以构成一个set。给出12张牌的所有属性值,求该组牌中是所有set。

输入:由若干组数据组成。每组十二行,每行表示一张牌的属性值。不同组数据之间用空格隔开。

输出:先输出所有的牌,然后依次输出找到的set,若找不到则输出“*** None Found ***”。不同样例之间用空格隔开。具体格式见sample。


Sample Input

S1PS
D3PO
S2GF
O2GS
O2GF
O3PO
S2RF
S3GS
D2GS
O1GS
O1GF
S2PS O2GF
O1PF
D2PO
D3RO
S2PO
O1GF
O1GS
D2GO
S3PF
S2GF
D2GS
S1RS

Sample Output

CARDS:  S1PS D3PO S2GF O2GS O2GF O3PO S2RF S3GS D2GS O1GS O1GF S2PS
SETS: 1. D3PO S2RF O1GS
2. S3GS D2GS O1GS CARDS: O2GF O1PF D2PO D3RO S2PO O1GF O1GS D2GO S3PF S2GF D2GS S1RS
SETS: *** None Found ***

暴力搜索即可。

 //////////////////////////////////////////////////////////////////////////
// POJ1053 Set Me
// Memory: 228K Time: 0MS
// Language: C++ Result: Accepted
////////////////////////////////////////////////////////////////////////// #include <iostream> using namespace std; char cards[][]; //检查第p位是否符合条件
bool check_bit(int i, int j, int k, int p) {
if (cards[i][p] == cards[j][p] && cards[j][p] == cards[k][p]) {
return true;
}
if (cards[i][p] != cards[j][p] && cards[j][p] != cards[k][p]
&& cards[i][p] != cards[k][p]) {
return true;
}
return false;
} //检查第i、j、k张牌的组合能否构成set
bool check(int i, int j, int k) {
if (check_bit(i, j, k, ) && check_bit(i, j, k, )
&& check_bit(i, j, k, ) && check_bit(i, j, k, )) {
return true;
}
return false;
} int main(void) {
while (cin >> cards[]) {
for (int i = ; i < ; ++i) {
cin >> cards[i];
}
cout << "CARDS: " << cards[];
for (int i = ; i < ; ++i) {
cout << " " << cards[i];
}
cout << endl;
cout << "SETS: ";
int set_id = ;
for (int i = ; i < ; ++i) {
for (int j = i + ; j < ; ++j) {
for (int k = j + ; k < ; ++k) {
if (check(i, j, k)) {
if (set_id >= ) {
cout << " ";
}
cout << ++set_id << ". " << cards[i] << " "
<< cards[j] << " " << cards[k] << endl;
}
}
}
}
if (set_id == ) {
cout << "*** None Found ***" << endl;
}
cout << endl;
}
return ;
}

POJ1053 Set Me的更多相关文章

随机推荐

  1. DAY7-面向对象之多态与多态性

    一.多态 多态指的是一类事物有多种形态 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abs ...

  2. java多线程编程——同步器Exchanger

    类java.util.concurrent.Exchanger提供了一个同步点,在这个同步点,一对线程可以交换数据.每个线程通过exchange()方法的入口提供数据给他的伙伴线程,并接收他的伙伴线程 ...

  3. JAVA基础知识总结10(包类)

    包:定义包用package关键字. 1:对类文件进行分类管理. 2:给类文件提供多层名称空间. 如果生成的包不在当前目录下,需要最好执行classpath,将包所在父目录定义到classpath变量中 ...

  4. 如何使用google等一系列搜索引擎?

    对于我们经常使用的搜索引擎大家都都不陌生,但是,如何高效的利用呢?大家都知道空格是搜索多个关键词,那么有没有其他的快捷键呢?答案是肯定的,以下内容转自知乎 1.双引号 把搜索词放在双引号中,代表完全匹 ...

  5. PHP如何将XML转成数组

    如果你使用 curl 获取的 xml data $xml = simplexml_load_string($data); $data['tk'] = json_decode(json_encode($ ...

  6. 第4章 springboot热部署 4-1 SpringBoot 使用devtools进行热部署

    /imooc-springboot-starter/src/main/resources/application.properties #关闭缓存, 即时刷新 #spring.freemarker.c ...

  7. B和strong以及i和em的区别(转)

    B和strong以及i和em的区别 (2013-12-31 13:58:35) 标签: b strong i em 搜索引擎 分类: 网页制作 一直以来都以为B和strong以及i和em是相同的效果, ...

  8. php 中两种获得数据库中 数据条数的方法

    一种是传统的利用mysql_num_rows()来计算 $sql="select * from news"; $res=mysql_query($sql); $number=mys ...

  9. JVM的内存管理、对象的生命周期、内存泄漏

    1 JVM内存 分为“堆”.“栈”和“方法区”三个区域,分别用于存储不同的数据 1.1 堆 JVM在其内存空间开辟一个称为”堆”的存储空间,这部分空间用于存储使用new关键字所创建的对象. 1.2 栈 ...

  10. IFC4 在线参考手册

    国内地址1:http://www.vfkjsd.cn/ifc/ifc4/index.htm 国内地址2:http://www.bim-times.com/ifc/ifc4/index.htm 官方地址 ...