题目描述
牌只有1到9,手里拿着已经排好序的牌a,对方出牌b,用程序判断手中牌是否能够压过对方出牌
规则:出牌牌型有5种
[1]一张 如4 则5…9可压过
[2]两张 如44 则55,66,77,…,99可压过
[3]三张 如444 规则如[2]
[4]四张 如4444 规则如[2]
[5]五张 牌型只有12345 23456 34567 45678 56789五个,后面的比前面的均大
压过输出YES 否则NO
如(括号内容为注释)
输入:
12233445566677(手中牌)
33(出牌)
输出:
YES
分析:采用map的结构,先进行数量判断,进行归类,在map中查找数量关系
未对非法输入进行判断
bool Card_judge()
{
int model[10] = { 0,1,2,3,4,5,6,7,8,9 };
string card;
getline(cin, card);
string enemy;
getline(cin, enemy);
int en = enemy.size();
int cn = card.size();
map<char, int> m_map;
for (int i = 0; i < cn; i++)
{
if (m_map.count(card[i]) == 0)
{
m_map[card[i]] = 1;
}
else
{
m_map[card[i]]++;
}
}
if (en == 1 || en == 2 || en == 3 || en == 4)
{
int num = enemy[0] - '0';
for (int i = num + 1; i <= 9; i++)
{
if (m_map.count(char(i + '0')) == 1 && m_map[char(i + '0')] >= en)
{
return true;
}
}
return false;
}
else if (en == 5)
{
int num = enemy[0] - '0';
if (num >= 5)
{
return false;
}
for (int i = num + 1; i <= 9; i++)
{
int n = 0;
bool flag = true;
for (int j = i; j <= 9; j++)
{
if (n <= 5 && flag)
{
if (m_map.count(char(j + '0')) >= 1)
{
n++;
}
else
{
flag = false;
}
}
else
{
break;
}
}
if (n == 5)
return true;
}
return false;
}
else
{
return false;
}
}