POJ1053 Set Me
题目来源: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的更多相关文章
随机推荐
- onclick事件没有反应的五种可能情况
转自:https://blog.csdn.net/qujing_1120/article/details/76853039 onclick=”alert()” 事件没有反应的几种情况.第一:<i ...
- pl/sql对excel数据的导入和导出
本来这部分是在上篇pl/sql的,但笔者介于此篇的内容,就独立出来了, 1.导出查询结果到excel文件,在查询结果上右键,然后弹出选择框如下: 2.从excel向数据库中导入数据: a.创建要导入的 ...
- Bytes和bits的区别(字节和位的区别)
基本概念 Bit意为“位”或“比特”,是计算机运算的基础,属于二进制的范畴: Byte意为“字节”,是计算机文件大小的基本计算单位: 这两者应用的场合不同.通常用bit来作数据传输的单位,因为物理层, ...
- 关联查询 join的使用
#!/usr/bin/env python import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.dec ...
- 离散对数的求解(bsgs)
bsgs算法 主要用来解决${A^x} = B(\bmod C)$(c是质数),都是整数,已知A.B.C求x. 例:poj 2417 Discrete Logging 具体步骤如下: 先把$x = i ...
- Vbs 脚本编程简明教程之一
—为什么要使用 Vbs ? 在 Windows 中,学习计算机操作也许很简单,但是很多计算机工作是重复性劳动,例如你每周也许需要对一些计算机文件进行复制.粘贴.改名.删除,也许你每天启动 计算机第一件 ...
- HDOJ 1121 Complete the Sequence
[题目大意]有一个数列P,它的第i项是当x=i时,一个关于x的整式的值.给出数列的前S项,你需要输出它的第S+1项到第S+C项,并且使整式的次数最低.多测. [数据范围]数据组数≤5000,S+C≤1 ...
- ARC061E Snuke's Subway Trip
传送门 题目大意 已知某城市的地铁网由一些地铁线路构成,每一条地铁线路由某一个公司运营,该城市规定:若乘坐同一公司的地铁,从开始到换乘只需要一块钱,换乘其他公司的价格也是一块钱,问从1号地铁站到n号地 ...
- Python程序设计4——控制语句
1 print和import的更多信息 1.1 使用逗号输出 前面已经讲解过如何使用print来打印表达式,可以使用都好来打印多个表达式,只要用逗号隔开即可. >>> print ' ...
- linux下top命令参数解释
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法. top - 01:06:48 up 1:22, 1 ...