题解 | #扑克牌大小#

扑克牌大小

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

#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<string> SplitString(string instr) {
    vector<string> result;
    for (int i = 0; i < instr.length(); i++) {
        for (int j = i + 1; j < instr.length() + 1; j++) {
            if (instr[j] == ' ' || j >= instr.length()) {
                result.push_back(instr.substr(i, j - i));
                i = j;
                break;
            }
        }

    }
    return result;
}
//把字符转换成数字
int IntDanZhang(string instr) {
    if (instr.size() == 1 && *instr.c_str() <= '9' && *instr.c_str() >= '3')return *instr.c_str() - '3' + 3;
    else if (instr == "10")return 10;
    else if (instr == "J")return 11;
    else if (instr == "Q")return 12;
    else if (instr == "K")return 13;
    else if (instr == "A")return 14;
    else if (instr == "2")return 15;
    else if (instr == "joker")return 16;
    else if (instr == "JOKER")return 17;
    else return 0;
}
//单张比较大小
bool Less(string str1, string str2) {
    return IntDanZhang(str1) < IntDanZhang(str2);
}
bool IsJokerZha(vector<string> instrs) {
    if (instrs.size() != 2)return false;
    if (instrs[0] != "joker" && instrs[1] != "joker")return false;
    if (instrs[0] != "JOKER" && instrs[1] != "JOKER")return false;
    return true;
}
bool IsDanZhang(vector<string> instrs) {
    if (instrs.size() == 1)return true;
    return false;
}
bool IsDuiZi(vector<string> instrs) {
    if (instrs.size() != 2)return false;
    if (instrs[0] != instrs[1])return false;
    return true;
}
int SubDan(string str1, string str2) {
    return IntDanZhang(str1) - IntDanZhang(str2);
}
bool IsShunZi(vector<string> instrs) {
    if (instrs.size() < 5)return false;
    for (int i = 0; i < instrs.size() - 1; i++) {
        if (SubDan(instrs[i + 1], instrs[i]) != 1)return false;
    }
    return true;
}
bool IsSanGe(vector<string> instrs) {
    if (instrs.size() != 3)return false;
    if (instrs[0] == instrs[1] && instrs[1] == instrs[2])return true;
    return false;
}
bool IsPutongZha(vector<string> instrs) {
    if (instrs.size() < 4)return false;
    for (int i = 0; i < instrs.size() - 1; i++) {
        if (instrs[i + 1] != instrs[i])return false;
    }
    return true;
}
void HJ88() {
    string tempstr;
    while (getline(cin, tempstr)) {
        string pai1_str, pai2_str;
        vector<string> pai1, pai2;
        int flag = 1;
        for (int i = 0; i < tempstr.size(); i++) {
            if (tempstr[i] == '-') {
                flag = 2;
                i++;
            }
            if (flag == 1)pai1_str.push_back(tempstr[i]);
            else if (flag == 2)pai2_str.push_back(tempstr[i]);
        }

        pai1 = SplitString(pai1_str);
        pai2 = SplitString(pai2_str);

        //牌数一样的情况
        if (pai1.size() == pai2.size()) {
            if ((IsDanZhang(pai1) && IsDanZhang(pai2)) || (IsDuiZi(pai1) &&
                    IsDuiZi(pai2)) || (IsShunZi(pai1) && IsShunZi(pai2)) || (IsSanGe(pai1) &&
                            IsSanGe(pai2)) || (IsPutongZha(pai1) && IsPutongZha(pai2))) {
                if (Less(pai1[0], pai2[0]))cout << pai2_str;
                else cout << pai1_str;
            } else if (IsJokerZha(pai1))cout << pai1_str;
            else if (IsJokerZha(pai2))cout << pai2_str;
            else cout << "ERROR" << endl;
        }
        //牌数不一样的情况(必定有炸)
        else {
            if (IsPutongZha(pai1) && (!IsPutongZha(pai2)) &&
                    (!IsJokerZha(pai2)))cout << pai1_str;
            else if (IsPutongZha(pai2) && (!IsPutongZha(pai1)) &&
                     (!IsJokerZha(pai1)))cout << pai2_str;
            else if (IsJokerZha(pai1))cout << pai1_str;
            else if (IsJokerZha(pai2))cout << pai2_str;
            //都是普通炸的情况
            else if (IsPutongZha(pai1) && IsPutongZha(pai2)) {
                if (pai1.size() > pai2.size())cout << pai1_str;
                if (pai1.size() < pai2.size())cout << pai2_str;
            }
            //都是普通牌的情况
            else cout << "ERROR" << endl;
        }
    }
}
int main() {
    HJ88();
}

全部评论

相关推荐

这不纯纯作弊了吗😢😢😢
编程界菜鸡:信这个的这辈子有了,这智商你靠啥都没用
点赞 评论 收藏
分享
05-26 09:07
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务