zoukankan      html  css  js  c++  java
  • 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 ***

    暴力搜索即可。

     1 //////////////////////////////////////////////////////////////////////////
     2 //        POJ1053 Set Me
     3 //        Memory: 228K        Time: 0MS
     4 //        Language: C++        Result: Accepted
     5 //////////////////////////////////////////////////////////////////////////
     6 
     7 #include <iostream>
     8 
     9 using namespace std;
    10 
    11 char cards[12][5];
    12 
    13 //检查第p位是否符合条件
    14 bool check_bit(int i, int j, int k, int p) {
    15     if (cards[i][p] == cards[j][p] && cards[j][p] == cards[k][p]) {
    16         return true;
    17     }
    18     if (cards[i][p] != cards[j][p] && cards[j][p] != cards[k][p] 
    19                                    && cards[i][p] != cards[k][p]) {
    20         return true;
    21     }
    22     return false;
    23 }
    24 
    25 //检查第i、j、k张牌的组合能否构成set
    26 bool check(int i, int j, int k) {
    27     if (check_bit(i, j, k, 0) && check_bit(i, j, k, 1) 
    28 && check_bit(i, j, k, 2) && check_bit(i, j, k, 3)) {
    29         return true;
    30     }
    31     return false;
    32 }
    33 
    34 int main(void) {
    35     while (cin >> cards[0]) {
    36         for (int i = 1; i < 12; ++i) {
    37             cin >> cards[i];
    38         }
    39         cout << "CARDS:  " << cards[0];
    40         for (int i = 1; i < 12; ++i) {
    41             cout << " " << cards[i];
    42         }
    43         cout << endl;
    44         cout << "SETS:   ";
    45         int set_id = 0;
    46         for (int i = 0; i < 12; ++i) {
    47             for (int j = i + 1; j < 12; ++j) {
    48                 for (int k = j + 1; k < 12; ++k) {
    49                     if (check(i, j, k)) {
    50                         if (set_id >= 1) {
    51                             cout << "        ";
    52                         }
    53                         cout << ++set_id << ".  " << cards[i] << " " 
    54                              << cards[j] << " " << cards[k] << endl;
    55                     }
    56                 }
    57             }
    58         }
    59         if (set_id == 0) {
    60             cout << "*** None Found ***" << endl;
    61         }
    62         cout << endl;
    63     }
    64     return 0;
    65 }
    View Code
  • 相关阅读:
    正则表达式 之领宽断言
    bat(续七)-for语句(循环结构)
    RBAC权限管理
    Redis缓存服务搭建及实现数据读写
    Myeclipse集成Maven(图文说明)
    实习第四周
    POJ 3461 Oulipo KMP算法题解
    原创文章
    apue和unp的学习之旅07——多种边界条件的讨论
    单链表的实现
  • 原文地址:https://www.cnblogs.com/dengeven/p/3259513.html
Copyright © 2011-2022 走看看