题解 | #扑克牌大小#
扑克牌大小
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();
}
叮咚买菜工作强度 221人发布
