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

查看9道真题和解析