扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A,2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):) 输入描述:输入两手牌,两手牌之间用“-”连接,每手牌的每张牌以空格分隔,“-”两边没有空格,如4 4 4 4-joker JOKER。 输出描述:输出两手牌中较大的那手,不含连接符,扑克牌顺序不变,仍以空格隔开;如果不存在比较关系则输出ERROR。 输入例子1:4 4 4 4-joker JOKER 输出例子1:joker JOKER #include<bits/stdc .h> #include<string.h> using namespace std; #define max_v 105 #define INF 999999 #define me(a,x) memset(a,x,sizeof(a)) typedef long long LL; map<string,int> mm; int main() { string str1,str2; char temp; while((temp=cin.get())!='-')//巧妙分割两种牌 str1 =temp; while((temp=cin.get())!='\n') str2 =temp; int l1=0; int l2=0; for(int i=0;i<str1.length();i )//计算空格数,空格数相等牌就相等 { if(str1[i]==' ') l1 ; } for(int i=0;i<str2.length();i ) { if(str2[i]==' ') l2 ; } string str3,str4; for(int i=3;i<=10;i )//给每种牌赋值 { str3=""; str3.push_back(char(i '0')); mm[str3]=i; } mm["J"]=11; mm["Q"]=12; mm["K"]=13; mm["A"]=14; mm["2"]=15; mm["joker"]=16; mm["JOKER"]=17; if(str1=="joker JOKER"||str2=="joker JOKER")//存在王炸肯定是王炸大 { cout<<"joker JOKER"<<endl; }else if(str1.length()==7&&str2.length()!=7)//存在普通炸 { cout<<str1<<endl; }else if(str1.length()!=7&&str2.length()==7)//存在普通炸 { cout<<str2<<endl; }else if(l1!=l2)//不存在王炸和普通炸且牌数不相同,无法比较 { cout<<"ERROR"<<endl; }else//单,对子,顺子,三个 { str3=""; str3=""; str3.push_back(str1[0]); str4.push_back(str2[0]); int x=mm[str3]; int y=mm[str4]; if(str1[0]=='1')//存在1代表存在10这张牌,特判一下!,因为10这张牌占了两个字符 { x=10; }else if(str2[0]=='1') { y=10; } if(x>y) { cout<<str1<<endl; }else { cout<<str2<<endl; } } return 0; } 来源:http://www./content-4-135901.html |
|