列表

详情


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;
    }
}

上一题