先对joker JOKER最大 然后是炸弹 都是炸弹比较第一张牌 你会发现 10 是两个字符 很不和谐
做了预处理 引入临时变量 然后把字符’0‘ eraser ,这样你就会发现(单牌以外的)同种牌型张数都是一样
要考虑的就少了代码如下
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main(){
map<char,int> m; //J Q K A 2 joker JOKER
for(int i=3;i<10;i++){
m[char(i+'0')]=i;
}
m['1']=10,m['J']=11,m['Q']=12,m['K']=13;
m['A']=14,m['2']=15,m['j']=16;//m["JOKER"]=17;
string s1,s2;
getline(cin,s1,'-');
getline(cin,s2);
string t1=s1,t2=s2;
for(string::size_type l1=t1.size(),i=0;i<l1;)//预处理
if(t1[i]=='0') t1.erase(i,1),l1--;
else i++;
for(string::size_type l1=t2.size(),i=0;i<l1;)
if(t2[i]=='0') t2.erase(i,1),l1--;
else i++;
string::size_type l1=t1.size(),l2=t2.size();
if(11==l1||11==l2) cout<<(11==l1?s1:s2)<<endl;
else if(7==l1&&7==l2) cout<<(m[s1[0]]>m[s2[0]]?s1:s2)<<endl;
else if(7==l1||7==l2) cout<<(7==l1?s1:s2)<<endl;
else if(l1==l2) {
if(("joker"==s1&&"JOKER"==s2)||("joker"==s2&&"JOKER"==s1)) cout<<"JOKER"<<endl;
else cout<<(m[s1[0]]>m[s2[0]]?s1:s2)<<endl;
}
else if((1==l1&&5==l2)||(5==l1&&1==l2)) cout<<(1==l1?s1:s2)<<endl;
else cout<<"ERROR"<<endl;
return 0;
}