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

      

  • 相关阅读:
    4、linux-grep awk sed and cuf sort uniq join
    2、linux-compress and uncompresse
    1、linux-wget
    Blast 如何使用Blast+(Linux)转载
    1、R-reshape2-cast
    2、R-reshape2-melt
    doc下批处理文件的感想
    关于大数的四则运算
    hadoop分布式安装教程(转)
    关于java中sizeof的问题
  • 原文地址:https://www.cnblogs.com/hardsoftware/p/6270526.html
Copyright © 2011-2022 走看看