扑克牌大小

描述

扑克牌游戏大家应该都比较熟悉了,一副牌由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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
#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;
}

  

posted @   Hardsoftware  阅读(730)  评论(0编辑  收藏  举报
编辑推荐:
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
阅读排行:
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
· Vite CVE-2025-30208 安全漏洞
点击右上角即可分享
微信分享提示