1、题目描述
五张牌,每张牌由牌大小和花色组成,牌大小2~10、J、Q、K、A,牌花色为红桃、黑桃、梅花、方块四种花色之一
判断牌型
牌型1,同花顺:同一花色的顺子,如红桃2红桃3红桃4红桃5红桃6。
牌型2,四条:四张相同数字+单张,如红桃A黑桃A梅花A方块A+黑桃K.
牌型3,葫芦:三张相同数字+一对,如红桃5黑桃5梅花5+方块9梅花9。
牌型4,同花:同一花色,如方块3方块7方块10方块J方块Q.
牌型5,顺子:花色不一样的顺子,如红桃2黑桃3红桃4红桃5方块6。
牌型6,三条:三张相同+两张单。
说明
- 五张牌里不会出现牌大小和花色完全相同的牌;
- 编号小的牌型较大,如同花顺比四条大,依次类推;
- 包含A的合法的顺子只有10JQKA和A2345;类似KA23的序列不认为是顺子。
2、输入描述
输入由5行组成,每行为一张牌大小和花色,牌大小为2~10、J、Q、K、A,花色分别用字符H、S、C、D表示红桃、黑桃、梅花、方块。
3、输出描述
输出牌型序号,5张牌符合多种牌型时,取最大的牌型序号输出。
用例:
输入
4 H
5 S
6 C
7 D
8 D
输出
5
ps:4 5 6 7 8构成顺子,输出5
用例:
输入
9 S
5 S
6 S
7 S
8 S
输出
1
ps:既是顺子又是同花,输出1,同花顺
温馨提示!!!
华为OD机试考试官方会对考生代码查重。华为od机试因为有题库所以有很大的概率抽到原题。如果碰到了题库中的原题,千万不要直接使用题解中的代码,一定要做些修改,比如代码中的变量名,除此之外,代码的组织结构和逻辑也要进行一些改变,所以在日常的刷题中,要提前编写好属于自己的代码。
4、题解
本题不难,将几种牌型的判断逻辑分别封装起来,然后根据牌型从大到小判断即可
代码如下:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<String[]> cardList = new ArrayList<>();
for (int i=0; i<5; i++) {
String[] strs = sc.nextLine().split(" ");
cardList.add(strs);
}
// 获取最大牌型
int res = getRes(cardList);
System.out.println(res);
}
private static int getRes(List<String[]> cardList) {
Map<String, Integer> cardMaps = getCardValues();
// 数字
List<String> numList = new ArrayList<>();
// 花色
List<String> colorList = new ArrayList<>();
for (String[