题解 | #扑克牌大小#

扑克牌大小

https://www.nowcoder.com/practice/d290db02bacc4c40965ac31d16b1c3eb

#include <iostream>
#include <string>
#include <vector>
using namespace std;

vector<string> decomposeS(string& s) {
    vector<string> r;
    string temp;
    for (auto& i : s) {
        if (i == ' ') {
            r.push_back(temp);
            temp.clear();
        } else {
            temp.push_back(i);
        }
    }
    r.push_back(temp);
    return r;
}

vector<int> allTypeCard(vector<string>& num) {
    vector<int> t(15, 0);
    vector<int> result(5, -1);
    //0炸弹,1三个,2顺子(5)个,3对子,4个子
    //判断顺序也是这个

    for (auto& i : num) {
        if (i.size() == 5) {
            if (i == "joker")
                ++t[13];
            else if (i == "JOKER")
                ++t[14];
        } else if (i.size() == 1) {
            char c = i[0];
            if (isdigit(c) && c != '2') {
                ++t[static_cast<int>(c - '3')];
            } else if (c == 'J') {
                ++t[8];
            } else if (c == 'Q')
                ++t[9];
            else if (c == 'K')
                ++t[10];
            else if (c == 'A')
                ++t[11];
            else if (c == '2')
                ++t[12];
        } else if (i.size() == 2) {
            ++t[7];
        }
    }
    if (num.size() != 5) {
        for (int i = 0; i != t.size(); ++i) {
            if (t[i] == 4) {
                result[0] = i;
                t[i] = 0;
                break;
            } else if (t[i] == 3) {
                result[1] = i;
                t[i] = 0;
                break;
            } else if (t[i] == 2) {
                result[3] = i;
                t[i] = 0;
                break;
            } else if (t[i] == 1) {
                if (i != 13 && i != 14) {
                    result[4] = i;
                    t[i] = 0;
                    break;
                } else {
                    if (t[13] == 1 && t[14] == 1)
                        result[0] = 13;
                    else
                        result[4] = i;
                }
            }
        }
    } else {
        for (int i = 0; i != t.size(); ++i) {
            if (t[i] != 0)
                result[2] = i;
        }
    }
    return result;
}
int main() {
    string s;
    getline(cin, s);
    string a = s.substr(0, s.find('-'));
    string b = s.substr(s.find('-') + 1, s.size());
    vector<string> num_a = decomposeS(a);
    vector<string> num_b = decomposeS(b);
    vector<int> a_t = allTypeCard(num_a);
    vector<int> b_t = allTypeCard(num_b);
    if (a_t[0] != -1) {
        if (b_t[0] == -1)
            cout << a;
        else if (a_t[0] > b_t[0])
            cout << a;
        else if (a_t[0] < b_t[0])
            cout << b;
    } else if (b_t[0] != -1) {
        cout << b;
    } else {
        for (int i = 1; i != 5; ++i) {
            if (a_t[i] != -1) {
                if (b_t[i] == -1)
                    cout << "ERROR";
                else if (a_t[i] > b_t[i])
                    cout << a;
                else if (a_t[i] < b_t[i])
                    cout << b;
                break;
            }
        }
    }
}
// 64 位输出请用 printf("%lld")

还是非常简单的,就是一个判断牌的问题,小意思

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务