题解 | #扑克牌大小#
扑克牌大小
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")
还是非常简单的,就是一个判断牌的问题,小意思