SH2. 扎金花
描述
两个搜狐的程序员加了一个月班,终于放假了,于是他们决定扎金花渡过愉快的假期 。 游戏规则: 共52张普通牌,牌面为2,3,4,5,6,7,8,9,10,J,Q,K,A之一,大小递增,各四张; 每人抓三张牌。两人比较手中三张牌大小,大的人获胜。 对于牌型的规则如下: 1.三张牌一样即为豹子 2.三张牌相连为顺子(A23不算顺子) 3.有且仅有两张牌一样为对子 豹子>顺子>对子>普通牌型 在牌型一样时,比较牌型数值大小(如AAA>KKK,QAK>534,QQ2>10104) 在二人均无特殊牌型时,依次比较三张牌中最大的。大的人获胜,如果最大的牌一样,则比较第二大,以此类推(如37K>89Q) 如二人牌面相同,则为平局。
输入描述
输入两个字符串代表两个玩家的牌(如"10KQ" "354"),先输入的作为玩家1,后输入的作为玩家2输出描述
1 代表 玩家1赢 0 代表 平局 -1 代表 玩家2赢 -2 代表不合法的输入示例1
输入:
KQ3 3Q9 10QA 6102 5810 7KK 632 74J 10102 K77 JKJ 926 68K 27A
输出:
1 1 -1 -1 1 1 -1
C++ 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-11-01
#include<bits/stdc++.h> using namespace std; int main() { string s,t; while(cin>>s>>t){ vector<int> a,b; int i; for(i=0;i<s.length();i++){ if('2'<=s[i]&&s[i]<='9'){ a.push_back(s[i]-'0'); }else if(s[i]=='1'){ a.push_back(10); i++; if(s[i]!='0'){ cout<<"-2"<<endl; break; } }else if(s[i]== 'J'){ a.push_back(11); }else if(s[i]=='Q'){ a.push_back(12); }else if(s[i]=='K'){ a.push_back(13); }else if(s[i]=='A'){ a.push_back(14); }else{ cout<<"-2"<<endl; break; } } if(i<s.length()) continue; sort(a.begin(),a.end()); for(i=0;i<t.length();i++){ if('2'<=t[i]&&t[i]<='9'){ b.push_back(t[i]-'0'); }else if(t[i]=='1'){ b.push_back(10); i++; if(t[i]!='0'){ cout<<"-2"<<endl; break; } }else if(t[i]== 'J'){ b.push_back(11); }else if(t[i]=='Q'){ b.push_back(12); }else if(t[i]=='K'){ b.push_back(13); }else if(t[i]=='A'){ b.push_back(14); }else{ cout<<"-2"<<endl; break; } } if(i<t.length()) continue; sort(b.begin(),b.end()); int aa,bb; int x1,y1; int x2,y2; if(a[0]==a[1]&&a[1]==a[2]){ aa=4; }else if(a[2]-a[1]==1&&a[1]-a[0]==1){ aa=3; }else if(a[0]==a[1]){ x1=a[0]; y1=a[2]; aa=2; }else if(a[1]==a[2]){ x1=a[1]; y1=a[0]; aa=2; }else{ aa=1; } if(b[0]==b[1]&&b[1]==b[2]){ bb=4; }else if(b[2]-b[1]==1&&b[1]-b[0]==1){ bb=3; }else if(b[0]==b[1]){ bb=2; x2=b[0]; y2=b[2]; }else if(b[1]==b[2]){ bb=2; x2=b[1]; y2=b[0]; }else{ bb=1; } if(aa>bb){ cout<<"1"; }else if(aa<bb){ cout<<"-1"; }else{ if(aa==4||aa==3){ if(a[0]==b[0]) cout<<"0"; else if(a[0]>b[0]) cout<<"1"; else cout<<"-1"; }else if(aa==2){ if(x1>x2) cout<<"1"; else if(x1<x2) cout<<"-1"; else{ if(y1>y2) cout<<"1"; else if(y1==y2) cout<<"0"; else cout<<"-1"; } }else{ int i; for(i=2;i>=0;i--){ if(a[i]>b[i]){ cout<<"1"; break; }else if(a[i]<b[i]){ cout<<"-1"; break; } } if(i<0) cout<<"0"; } } cout<<endl; } }
C++ 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-10-31
#include<bits/stdc++.h> using namespace std; int main() { string s,t; while(cin>>s>>t){ vector<int> a,b; int i; for(i=0;i<s.length();i++){ if('2'<=s[i]&&s[i]<='9'){ a.push_back(s[i]-'0'); }else if(s[i]=='1'){ a.push_back(10); i++; if(s[i]!='0'){ cout<<"-2"<<endl; break; } }else if(s[i]== 'J'){ a.push_back(11); }else if(s[i]=='Q'){ a.push_back(12); }else if(s[i]=='K'){ a.push_back(13); }else if(s[i]=='A'){ a.push_back(14); }else{ cout<<"-2"<<endl; break; } } if(i<s.length()) continue; sort(a.begin(),a.end()); for(i=0;i<t.length();i++){ if('2'<=t[i]&&t[i]<='9'){ b.push_back(t[i]-'0'); }else if(t[i]=='1'){ b.push_back(10); i++; if(t[i]!='0'){ cout<<"-2"<<endl; break; } }else if(t[i]== 'J'){ b.push_back(11); }else if(t[i]=='Q'){ b.push_back(12); }else if(t[i]=='K'){ b.push_back(13); }else if(t[i]=='A'){ b.push_back(14); }else{ cout<<"-2"<<endl; break; } } if(i<t.length()) continue; sort(b.begin(),b.end()); int aa,bb; int x1,y1; int x2,y2; if(a[0]==a[1]&&a[1]==a[2]){ aa=4; }else if(a[2]-a[1]==1&&a[1]-a[0]==1){ aa=3; }else if(a[0]==a[1]){ x1=a[0]; y1=a[2]; aa=2; }else if(a[1]==a[2]){ x1=a[1]; y1=a[0]; aa=2; }else{ aa=1; } if(b[0]==b[1]&&b[1]==b[2]){ bb=4; }else if(b[2]-b[1]==1&&b[1]-b[0]==1){ bb=3; }else if(b[0]==b[1]){ bb=2; x2=b[0]; y2=b[2]; }else if(b[1]==b[2]){ bb=2; x2=b[1]; y2=b[0]; }else{ bb=1; } if(aa>bb){ cout<<"1"; }else if(aa<bb){ cout<<"-1"; }else{ if(aa==4||aa==3){ if(a[0]==b[0]) cout<<"0"; else if(a[0]>b[0]) cout<<"1"; else cout<<"-1"; }else if(aa==2){ if(x1>x2) cout<<"1"; else if(x1<x2) cout<<"-1"; else{ if(y1>y2) cout<<"1"; else if(y1==y2) cout<<"0"; else cout<<"-1"; } }else{ int i; for(i=2;i>=0;i--){ if(a[i]>b[i]){ cout<<"1"; break; }else if(a[i]<b[i]){ cout<<"-1"; break; } } if(i<0) cout<<"0"; } } cout<<endl; } }
C++14 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-09-04
#include<bits/stdc++.h> using namespace std; int main() { string s,t; while(cin>>s>>t){ vector<int> a,b; int i; for(i=0;i<s.length();i++){ if('2'<=s[i]&&s[i]<='9'){ a.push_back(s[i]-'0'); }else if(s[i]=='1'){ a.push_back(10); i++; if(s[i]!='0'){ cout<<"-2"<<endl; break; } }else if(s[i]== 'J'){ a.push_back(11); }else if(s[i]=='Q'){ a.push_back(12); }else if(s[i]=='K'){ a.push_back(13); }else if(s[i]=='A'){ a.push_back(14); }else{ cout<<"-2"<<endl; break; } } if(i<s.length()) continue; sort(a.begin(),a.end()); for(i=0;i<t.length();i++){ if('2'<=t[i]&&t[i]<='9'){ b.push_back(t[i]-'0'); }else if(t[i]=='1'){ b.push_back(10); i++; if(t[i]!='0'){ cout<<"-2"<<endl; break; } }else if(t[i]== 'J'){ b.push_back(11); }else if(t[i]=='Q'){ b.push_back(12); }else if(t[i]=='K'){ b.push_back(13); }else if(t[i]=='A'){ b.push_back(14); }else{ cout<<"-2"<<endl; break; } } if(i<t.length()) continue; sort(b.begin(),b.end()); int aa,bb; int x1,y1; int x2,y2; if(a[0]==a[1]&&a[1]==a[2]){ aa=4; }else if(a[2]-a[1]==1&&a[1]-a[0]==1){ aa=3; }else if(a[0]==a[1]){ x1=a[0]; y1=a[2]; aa=2; }else if(a[1]==a[2]){ x1=a[1]; y1=a[0]; aa=2; }else{ aa=1; } if(b[0]==b[1]&&b[1]==b[2]){ bb=4; }else if(b[2]-b[1]==1&&b[1]-b[0]==1){ bb=3; }else if(b[0]==b[1]){ bb=2; x2=b[0]; y2=b[2]; }else if(b[1]==b[2]){ bb=2; x2=b[1]; y2=b[0]; }else{ bb=1; } if(aa>bb){ cout<<"1"; }else if(aa<bb){ cout<<"-1"; }else{ if(aa==4||aa==3){ if(a[0]==b[0]) cout<<"0"; else if(a[0]>b[0]) cout<<"1"; else cout<<"-1"; }else if(aa==2){ if(x1>x2) cout<<"1"; else if(x1<x2) cout<<"-1"; else{ if(y1>y2) cout<<"1"; else if(y1==y2) cout<<"0"; else cout<<"-1"; } }else{ int i; for(i=2;i>=0;i--){ if(a[i]>b[i]){ cout<<"1"; break; }else if(a[i]<b[i]){ cout<<"-1"; break; } } if(i<0) cout<<"0"; } } cout<<endl; } }
C++ 解法, 执行用时: 2ms, 内存消耗: 400KB, 提交时间: 2020-10-11
#include<bits/stdc++.h> using namespace std; int tonum(string ss){ int n=ss.size(); vector<int>vc; for(int i=0;i<n;++i){ if(ss[i]>='2'&&ss[i]<='9')vc.push_back(ss[i]-'0'); else if(ss[i]=='J'||ss[i]=='Q'||ss[i]=='K'||ss[i]=='A'){ switch(ss[i]){ case ('J'):vc.push_back(11);break; case ('Q'):vc.push_back(12);break; case ('K'):vc.push_back(13);break; case ('A'):vc.push_back(14);break; } } else if(ss[i]=='1'){ int j=i+1; if(j<n){ if(ss[j]!='0')return -1; else { vc.push_back(10);i=i+1; } } else return -1; } else return-1; } if(vc.size()!=3)return -1; else{sort(vc.begin(),vc.end()); if (vc[0] + 1 == vc[1] && vc[1] + 1 == vc[2]) return vc[2] * 10000; else if (vc[0] == vc[1] && vc[1] == vc[2]) return vc[2] * 100000; else if (vc[0] == vc[1]) return vc[1] * 1000 + vc[2]; else if (vc[1] == vc[2]) return vc[1] * 1000 + vc[0]; else return vc[2] * 100 + vc[1] * 10 + vc[0] ; } } int main(){ string p1,p2; while(cin>>p1>>p2){ if(tonum(p1)==-1||tonum(p2)==-1){ cout<<-2<<" "; } else if(tonum(p1)>tonum(p2)){ cout<<1<<" "; } else if(tonum(p1)==tonum(p2)){ cout<<0<<" "; } else cout<<-1<<" "; cout<<endl; } return 0; }
C++ 解法, 执行用时: 2ms, 内存消耗: 400KB, 提交时间: 2020-09-06
#include<bits/stdc++.h> using namespace std; int main() { string s,t; while(cin>>s>>t){ vector<int> a,b; int i; for(i=0;i<s.length();i++){ if('2'<=s[i]&&s[i]<='9'){ a.push_back(s[i]-'0'); }else if(s[i]=='1'){ a.push_back(10); i++; if(s[i]!='0'){ cout<<"-2"<<endl; break; } }else if(s[i]== 'J'){ a.push_back(11); }else if(s[i]=='Q'){ a.push_back(12); }else if(s[i]=='K'){ a.push_back(13); }else if(s[i]=='A'){ a.push_back(14); }else{ cout<<"-2"<<endl; break; } } if(i<s.length()) continue; sort(a.begin(),a.end()); for(i=0;i<t.length();i++){ if('2'<=t[i]&&t[i]<='9'){ b.push_back(t[i]-'0'); }else if(t[i]=='1'){ b.push_back(10); i++; if(t[i]!='0'){ cout<<"-2"<<endl; break; } }else if(t[i]== 'J'){ b.push_back(11); }else if(t[i]=='Q'){ b.push_back(12); }else if(t[i]=='K'){ b.push_back(13); }else if(t[i]=='A'){ b.push_back(14); }else{ cout<<"-2"<<endl; break; } } if(i<t.length()) continue; sort(b.begin(),b.end()); int aa,bb; int x1,y1; int x2,y2; if(a[0]==a[1]&&a[1]==a[2]){ aa=4; }else if(a[2]-a[1]==1&&a[1]-a[0]==1){ aa=3; }else if(a[0]==a[1]){ x1=a[0]; y1=a[2]; aa=2; }else if(a[1]==a[2]){ x1=a[1]; y1=a[0]; aa=2; }else{ aa=1; } if(b[0]==b[1]&&b[1]==b[2]){ bb=4; }else if(b[2]-b[1]==1&&b[1]-b[0]==1){ bb=3; }else if(b[0]==b[1]){ bb=2; x2=b[0]; y2=b[2]; }else if(b[1]==b[2]){ bb=2; x2=b[1]; y2=b[0]; }else{ bb=1; } if(aa>bb){ cout<<"1"; }else if(aa<bb){ cout<<"-1"; }else{ if(aa==4||aa==3){ if(a[0]==b[0]) cout<<"0"; else if(a[0]>b[0]) cout<<"1"; else cout<<"-1"; }else if(aa==2){ if(x1>x2) cout<<"1"; else if(x1<x2) cout<<"-1"; else{ if(y1>y2) cout<<"1"; else if(y1==y2) cout<<"0"; else cout<<"-1"; } }else{ int i; for(i=2;i>=0;i--){ if(a[i]>b[i]){ cout<<"1"; break; }else if(a[i]<b[i]){ cout<<"-1"; break; } } if(i<0) cout<<"0"; } } cout<<endl; } }