链接:https://www.nowcoder.com/questionTerminal/0a92c75f5d6b4db28fcfa3e65e5c9b3f?toCommentId=12666232
来源:牛客网
扑克牌游戏大家应该都比较熟悉了,一副牌由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)输入的两手牌不会出现相等的情况。
答案提示:
(1)除了炸弹和对王之外,其他必须同类型比较。
(2)输入已经保证合法性,不用检查输入是否是合法的牌。
(3)输入的顺子已经经过从小到大排序,因此不用再排序了.
数据范围:保证输入合法
import java.util.*;
public class Main{
public static int findSpecial(String str){//特殊的手牌
String[]arr=str.split(" ");//手牌是用空格分割的,我们这里把空格去掉
if(arr.length==2){//对子或者大小王的情况
if(arr[0].equals("joker")||arr[1].equals("joker")){
//题目中说了,大小王是成对出现的,我们这里只要判断是不是0和1下标是joker即可
return 1;//最高优先级
}
}else if(arr.length==4){//题目中规定4个只有炸弹
return 2;//第二优先级
}
return 3;//其他的都是第三优先级——第三优先级的同类比较
}
public static int size(char x){//单张牌面大小
//规定3 4 5 6 7 8 9 10 J Q K A 2 大小王成对出现,这里不考虑
//对应1 2 3 4 5 6 7 8 9 10 11 12 13
if(3<=x&&x<=10){
return x-2;
}
switch (x){
case 'J':
return 9;
case 'Q':
return 10;
case 'K':
return 11;
case 'A':
return 12;
}
return 0;
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String str=scanner.nextLine();
String[] arr=str.split("-");//把两手牌用split分割开来
String str1=arr[0];
String str2=arr[1];
int level1=findSpecial(str1);
int level2=findSpecial(str2);
if(level1==1||level2==1){//有一方出现双王
if(level1==1){
System.out.println(arr[0]);
}else{
System.out.println(arr[1]);
}
return;
}else if(level1==2||level2==2){//没有双王,但是有一方有炸弹
if(level1==2&&level2==2){//都是炸弹
if(arr[0].charAt(0)>arr[1].charAt(0)){
System.out.println(arr[0]);
}else{
System.out.println(arr[1]);
}
return;
}
if(level1==2||level2==2){//有一方是炸弹,另一方不是
if(level1==2){
System.out.println(arr[0]);
}else{
System.out.println(arr[1]);
}
return;
}
}else{//没有炸弹,没有双王,那就是同类型比较了
String[] tmp1=str1.split(" ");//计算第一幅牌的个数
String[] tmp2=str2.split(" ");//计算第二幅牌的个数
if(tmp1.length!=tmp2.length){//牌个数不一样没法比
System.out.println("ERROR");
}else{//牌个数一样,个子,对子,三个比较牌面大小;顺子比较最小牌大小
//也就是我们比第一张牌即可
if(size(str1.charAt(0))>size(str2.charAt(0))){
System.out.println(str1);
}else{
System.out.println(str2);
}
}
}
}
}