天天看點

【HJ88】鬥地主撲克牌-手牌大小比較(模拟)

1.題目

【HJ88】鬥地主撲克牌-手牌大小比較(模拟)
【HJ88】鬥地主撲克牌-手牌大小比較(模拟)

2.思路

手牌比較:

(1)如果手牌的類型不同(分為三種情況):

1)存在王炸,則直接輸出王炸;

2)else if存在炸彈,則直接輸出炸彈;

3)其他最後情況:無法比較,直接輸出ERROR。

(2)如果手牌的類型相同(單對單、二對二、三對三、炸彈對炸彈、順子對順子):

3.代碼

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){
    string str;
    string std="345678910JQKA2jokerJOKER";
    while(getline(cin,str)){
        int index=str.find('-');
        string str1=str.substr(0,index);//截取下标為0,長度為index的字元串
        string str2=str.substr(index+1);//第二組手牌
        int n1=count(str1.begin(),str1.end(),' ');
        int n2=count(str2.begin(),str2.end(),' ');
        if(n1!=n2){//根據空格數判斷兩對手牌是否相同類型,如果不同時
            if(str1=="joker JOKER"||str2=="joker JOKER"){
                cout<<"joker JOKER"<<endl;
            }else if(n1==3){//如果1方為炸彈則赢了(這種情況2方不會同時為炸彈)
                cout<<str1<<endl;
            }else if(n2==3){//如果2方為炸彈則赢了
                cout<<str2<<endl;
            }else{//不存在比較關系
                cout<<"ERROR"<<endl;
            }
        }else{//如果兩對手牌是同種類型,則隻用比較第一個
            string s1=str1.substr(0,str1.find(' '));
            string s2=str2.substr(0,str2.find(' '));
            int rank1=std.find(s1);
            int rank2=std.find(s2);
            if(rank1>rank2){
                cout<<str1<<endl;
            }else{
                cout<<str2<<endl;
            }
        }
    }
    return 0;
}