题解 | #扑克牌大小#
扑克牌大小
https://www.nowcoder.com/practice/d290db02bacc4c40965ac31d16b1c3eb
对于扑克牌大小这道题目,如果知道map映射的思想,做起来就会很简单,我们可以先把每张扑克牌上的内容,从字符串按照大小映射为相应数字,这样之后的比较就会变得很简单
- 我们先根据“-”的位置,将两副牌分别放入两个字符串,
- 接下来就可以根据空格的个数,判断两副牌是否为同类型,需要注意,炸弹和对王
- 如果空格个数不同,对炸弹和对王分别判断,不属于这两种类型就可以直接输出ERROR ,这里在判断炸弹和对王的时候,我们可以直接根据字符串长度去判断,更为简单
- 如果空格个数相同,那说明是同类型,那我们就可以直接根据两副牌中第一张扑克比较大小,这里就需要用到我们的map映射了,先分别分离出两副牌中的第一张扑克的内容,直接利用map比较输出即可
#include<iostream>
#include <map>
#include<string>
using namespace std;
map<string,int> mp={{"3",3},{"4",4},{"5",5},{"6",6},{"7",7},{"7",7},{"8",8},{"9",9},{"10",10},{"J",11},{"Q",12},{"K",13},{"A",14},{"2",15},{"joker",16},{"JOKER",17}};
int judge_space(string a)
{
int cnt=0;
for(int i=0;i<a.size();i++)
{
if(a[i]==' ')
{
cnt++;
}
}
return cnt;
}
int main()
{
string str,stra,strb;
getline(cin,str);
int pos=str.find("-");
int len=str.size();
stra=str.substr(0,pos);
strb=str.substr(pos+1,len-pos-1);
int spacea=judge_space(stra);
int spaceb=judge_space(strb);
if(spacea!=spaceb)
{
if(pos==11)
{
cout<<stra<<endl;
}
else if(len-pos-1==11)
{
cout<<strb<<endl;
}
else if(pos==7)
{
cout<<stra<<endl;
}
else if(len-pos-1==7)
{
cout<<strb<<endl;
}
else
{
cout<<"ERROR"<<endl;
}
}
else
{
if(spacea==0)
{
if(mp[stra]>mp[strb])
{
cout<<stra<<endl;
}
else
{
cout<<strb<<endl;
}
}
else
{
int posa=stra.find(' ');
int posb=strb.find(' ');
string aa=stra.substr(0,posa);
string bb=strb.substr(0,posb);
if(mp[aa]>mp[bb])
{
cout<<stra<<endl;
}
else
{
cout<<strb<<endl;
}
}
}
return 0;
}
