• 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
  • 相关阅读:
    “孤立”用户
    MongoDB 维护Replica Set
    Design7:数据删除设计
    abap取中值的函数
    REPLACE...IN.....WITH.... 的使用
    ABAP中RETURN与EXIT语句的区别
    在一个程序中调用另一个程序并且传输数据到选择屏幕执行这个程序
    Extract Datasets
    事件
    计算字符串长度的实例
  • 原文地址:https://www.cnblogs.com/dengeven/p/3259513.html
Copyright © 2020-2023  润新知