目录
牛客OR44 扑克牌大小
解析代码
本题的题目意思是输入的只是这些类型中的一种,个子,对子,顺子(连续5张),三个,炸弹(四个)和对王。其实就是最多5张牌(顺子),最少1一张牌之间的比较。不存在其他情况。 由输入保证两手牌都是合法的,顺子已经从小到大排列,按照题意牌面类型的确定和大小的比较直接可以转换为牌个数的比较。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string FindMax(const string& line)
{
if (line.find("joker JOKER") != string::npos)
return "joker JOKER";
int dash = line.find('-');
// 分开两手牌
string car1 = line.substr(0, dash);
string car2 = line.substr(dash + 1);
// 获取两手牌的张数
int car1_cnt = count(car1.begin(), car1.end(), ' ') + 1;
int car2_cnt = count(car2.begin(), car2.end(), ' ') + 1;
// 获取两手牌的各自第一张牌
string car1_first = car1.substr(0, car1.find(' '));
string car2_first = car2.substr(0, car2.find(' '));
if (car1_cnt == car2_cnt) // 两手牌的类型相同
{
string str = "345678910JQKA2jokerJOKER";
if (str.find(car1_first) > str.find(car2_first))
return car1;
return car2;
}
if (car1_cnt == 4) // 说明是炸弹
return car1;
else if (car2_cnt == 4)
return car2;
return "ERROR";
}
int main()
{
string line = "";
getline(cin, line);
cout << FindMax(line) << endl;
return 0;
}