zoukankan      html  css  js  c++  java
  • 扑克牌大小

    描述

    扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):
    3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER
    输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如:4 4 4 4-joker JOKER。
    请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR。
    基本规则:
    (1)输入每手牌可能是个子、对子、顺子(连续5张)、三个、炸弹(四个)和对王中的一种,不存在其他情况,由输入保证两手牌都是合法的,顺子已经从小到大排列;
    (2)除了炸弹和对王可以和所有牌比较之外,其他类型的牌只能跟相同类型的存在比较关系(如,对子跟对子比较,三个跟三个比较),不考虑拆牌情况(如:将对子拆分成个子);
    (3)大小规则跟大家平时了解的常见规则相同,个子、对子、三个比较牌面大小;顺子比较最小牌大小;炸弹大于前面所有的牌,炸弹之间比较牌面大小;对王是最大的牌;

    (4)输入的两手牌不会出现相等的情况。

    知识点 字符串,循环,链表,队列,栈,查找,搜索,排序,树,图,数组,函数,指针,枚举,位运算,结构体,联合体,文件操作,递归
    运行时间限制 0M
    内存限制 0
    输入

    输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如 4 4 4 4-joker JOKER。

    输出

    输出两手牌中较大的那手,不含连接符,扑克牌顺序不变,仍以空格隔开;如果不存在比较关系则输出ERROR。

    样例输入 4 4 4 4-joker JOKER
    样例输出 joker JOKER
    #include<iostream>
    #include<vector>
    #include<string>
    #include<string.h>
    
    using namespace std;
    
    
    void getcard(char *buf, int a, int b, vector<string> &v)
    {
        int last = a;
        for(int i=a; i<b; i++)
        {
            if(buf[i]==' ')
            {
                v.push_back(string(buf,last,i-last));
                last = i+1;
            }
        }
        v.push_back(string(buf,last,b-last));
    }
    
    void display(vector<string> player)
    {
        for(int i=0; i<player.size()-1; i++)
            cout<<player[i]<<' ';
        cout<<player[player.size()-1];
    }
    
    int toInt(string a)
    {
        if(a=="joker")
            return 99;
        if(a=="JOKER")
            return 100;
        if(a=="A")
            return 14;
        if(a=="2")
            return 15;
        if(a=="J")
            return 11;
        if(a=="Q")
            return 12;
        if(a=="K")
            return 13;
        if(a=="10")
            return 10;
        else
            return a[0]-'0';
    }
    
    int isZhadan(vector<string> player)
    {
        if(player.size()==4)
            return 1;
        if(player.size()==2)
        {
            if( (player[0]=="JOKER"||player[0]=="joker") && (player[1]=="JOKER"||player[1]=="joker") )
                return 2;
        }
        return 0;
    }
    
    void judge(vector<string> player1, vector<string> player2)
    {
        if(isZhadan(player1)>0 && isZhadan(player2)==0)
        {
            display(player1);
            return;
        }
    
        if(isZhadan(player1)==0 && isZhadan(player2)>0)
        {
            display(player2);
            return;
        }
    
        if(isZhadan(player1) > isZhadan(player2))
        {
            display(player1);
            return;
        }
    
        if(isZhadan(player1) < isZhadan(player2))
        {
            display(player2);
            return;
        }
    
        if(player1.size()==1)
        {
            if(player2.size()==1)
            {
                if( toInt(player1[0]) > toInt(player2[0]) )
                    display(player1);
                else
                    display(player2);
            }
            else
            {
                cout<<"ERROR"<<endl;
            }
            return;
        }
    
        if(player1.size()==2)
        {
            if(player2.size()==2)
            {
                if( toInt(player1[0]) > toInt(player2[0]) )
                    display(player1);
                else
                    display(player2);
            }
            else
            {
                cout<<"ERROR"<<endl;
            }
            return;
        }
    
        if(player1.size()==3)
        {
            if(player2.size()==3)
            {
                if( toInt(player1[0]) > toInt(player2[0]) )
                    display(player1);
                else
                    display(player2);
            }
            else
            {
                cout<<"ERROR"<<endl;
            }
            return;
        }
    
        if(player1.size()==4)
        {
            if(player2.size()==4)
            {
                if( toInt(player1[0]) > toInt(player2[0]) )
                    display(player1);
                else
                    display(player2);
            }
            else
            {
                cout<<"ERROR"<<endl;
            }
            return;
        }
    
        if(player1.size()==5)
        {
            if(player2.size()==5)
            {
                if( toInt(player1[0]) > toInt(player2[0]) )
                    display(player1);
                else
                    display(player2);
            }
            else
            {
                cout<<"ERROR"<<endl;
            }
            return;
        }
    
    }
    
    int main()
    {
        char buf[100];
    
        vector<string> player1;
        vector<string> player2;
    
        cin.get(buf, 100);
    
        int len = strlen(buf);
    
        int ge;
        for(int i=0; i<len; i++)
        {
            if(buf[i]=='-')
            {
                ge = i;
                break;
            }
        }
    
        getcard(buf,0,ge,player1);
        getcard(buf,ge+1,len,player2);
    /*
        for(int i=0; i<player1.size(); i++)
            cout<<player1[i]<<endl;
        for(int i=0; i<player2.size(); i++)
            cout<<player2[i]<<endl;
    */
        judge(player1,player2);
    
        return 0;
    }
    

      

  • 相关阅读:
    HDU 2852 KiKi's K-Number (主席树)
    HDU 2089 不要62
    Light oj 1140 How Many Zeroes?
    Bless You Autocorrect!
    HDU 6201 transaction transaction transaction
    HDU1561 The more ,The better (树形背包Dp)
    CodeForces 607B zuma
    POJ 1651 Mulitiplication Puzzle
    CSUOJ 1952 合并石子
    Uva 1599 Ideal path
  • 原文地址:https://www.cnblogs.com/hardsoftware/p/6270526.html
Copyright © 2011-2022 走看看