题解 | #扑克牌大小#
扑克牌大小
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(); }