华为OD机试 - 德州扑克 - 逻辑分析(Java 2023 B卷 200分)

news2024/11/20 11:51:36

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
      • 1、判断牌型
      • 2、说明
    • 二、输入描述
    • 三、输出描述
      • 1、输入
      • 2、输出
      • 3、说明
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

五张牌,每张牌由牌大小和花色组成,牌大小2~10、J、Q、K、A,牌花色为红桃、黑桃、梅花、方块四种花色之一

1、判断牌型

牌型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,三条:三张相同+两张单。

2、说明

  1. 五张牌里不会出现牌大小和花色完全相同的牌;
  2. 编号小的牌型较大,如同花顺比四条大,依次类推;
  3. 包含A的合法的顺子只有10JQKA和A2345;类似KA23的序列不认为是顺子。

二、输入描述

输入由5行组成,每行为一张牌大小和花色,牌大小为2~10、J、Q、K、A,花色分别用字符H、S、C、D表示红桃、黑桃、梅花、方块。

三、输出描述

输出牌型序号,5张牌符合多种牌型时,取最大的牌型序号输出。

用例:

1、输入

4 H
5 S
6 C
7 D
8 D

2、输出

5

3、说明

可以组成45678,牌型5,顺子

四、解题思路

  1. 输入由5行组成,每行为一张牌大小和花色,牌大小为2~10、J、Q、K、A,花色分别用字符H、S、C、D表示红桃、黑桃、梅花、方块。
  2. 特殊字符转换;
  3. 根据数值升序排序;
  4. 判断对手的牌型;
    • 默认为顺子,如果扑克牌不是自增的,判断不是顺子;
    • 默认为同花,如果扑克牌不是相同颜色,判断不是同花;
    • 定义map,存储对手的牌型,key:joker value:张数;
    • 特殊处理,2、3、4、5、A;
    • 判断四条、三条、葫芦;
  5. 组合判断牌型,按照牌型级别顺序输出。

五、Java算法源码

// 同花
private static boolean sameColor = true;
// 顺子
private static boolean dragon = true;
// 四条
private static boolean fourKind = false;
// 三条
private static boolean threeKind = false;
// 两条
private static boolean twoKind = false;

private static Map<String, Integer> jqkaMap = new HashMap<>();
static {
    jqkaMap.put("J", 11);
    jqkaMap.put("Q", 12);
    jqkaMap.put("K", 13);
    jqkaMap.put("A", 14);
}

/**
 * 输入由5行组成,每行为一张牌大小和花色,牌大小为2~10、J、Q、K、A,
 * 花色分别用字符H、S、C、D表示红桃、黑桃、梅花、方块。
 */
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    List<String[]> intList = new ArrayList<>();
    for (int i = 0; i < 5; i++) {
        intList.add(sc.nextLine().split(" "));
    }

    List<String[]> collect = intList.stream().map(x -> {// 特殊字符转换
        if (jqkaMap.containsKey(x[0])) {
            x[0] = String.valueOf(jqkaMap.get(x[0]));
        }
        return x;
    }).sorted(new Comparator<String[]>() {// 根据数值升序排序
        @Override
        public int compare(String[] o1, String[] o2) {
            Integer poker1 = jqkaMap.getOrDefault(o1[0], Integer.valueOf(o1[0]));
            Integer poker2 = jqkaMap.getOrDefault(o2[0], Integer.valueOf(o2[0]));
            return poker1 - poker2;
        }
    }).collect(Collectors.toList());

    // 判断牌型
    judgeJoker(collect);
    // 输出牌型
    System.out.println(judge());
}

// key:joker value:张数
static Map<Integer, Integer> map = new HashMap<>();
private static void judgeJoker(List<String[]> intList) {
    for (int i = 0; i < intList.size(); i++) {
        Integer poker = Integer.valueOf(intList.get(i)[0]);
        String color = intList.get(i)[1];
        if (i + 1 < intList.size()) {
            Integer next = Integer.valueOf(intList.get(i + 1)[0]);
            // 默认为顺子,如果扑克牌不是自增的,判断不是顺子
            if (dragon && !(++poker).equals(next)) {
                dragon = false;
            }

            // 默认为同花,如果扑克牌不是相同颜色,判断不是同花
            String nextColor = intList.get(i + 1)[1];
            if (sameColor && !color.equals(nextColor)) {
                sameColor = false;
            }
        }

        // key:joker value:张数
        Integer sum = map.getOrDefault(poker, 0);
        map.put(poker, ++sum);
    }

    // 特殊处理,2、3、4、5、A
    specialDragon(intList);

    List<Map.Entry<Integer, Integer>> mapList = new ArrayList<>(map.entrySet());
    mapList.stream().map(x -> {
        Integer sum = x.getValue();
        if (sum.equals(4)) {// 判断四条
            fourKind = true;
        }
        if (sum.equals(3)) {// 判断三条
            threeKind = true;
        }
        if (sum.equals(2)) {// 判断葫芦
            twoKind = true;
        }
        return x;
    }).collect(Collectors.toList());
}

// 特殊处理,2、3、4、5、A
private static void specialDragon(List<String[]> intList) {
    Integer first = Integer.valueOf(intList.get(0)[0]);
    Integer two = Integer.valueOf(intList.get(1)[0]);
    Integer three = Integer.valueOf(intList.get(2)[0]);
    Integer four = Integer.valueOf(intList.get(3)[0]);
    Integer five = Integer.valueOf(intList.get(4)[0]);
    if (first.equals(2) && two.equals(3) && three.equals(4) && four.equals(5) && five.equals(14)) {
        dragon = true;
    }
}

/**
 * 组合判断牌型,按照牌型级别顺序输出
 */
private static int judge() {
    if (dragon && sameColor) return 1;// 牌型1,同花顺
    if (fourKind) return 2;// 牌型2,四条
    if (threeKind && twoKind) return 3;// 牌型3,葫芦
    if (sameColor) return 4;// 牌型4,同花
    if (dragon) return 5;// 牌型5,顺子
    if (threeKind) return 6;// 牌型6,三条
    return 0;
}

六、效果展示

1、输入

10 H
J H
K H
A H
Q H

2、输出

1

3、说明

可以组成10JQKA, 花色相同,牌型1,同花顺

在这里插入图片描述


🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1137816.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动化学报格式 Overleaf 在线使用 【2023最新教程】

自动化学报格式 Overleaf 在线使用 摘要 2023年10月26日19:28:17&#xff08;云南昆明&#xff09; 今天课程老师要我们期末提交一篇论文&#xff0c;以自动化学报格式提交。因此&#xff0c;去官网发现只有 latex 格式&#xff0c;下载下来发现各种格式不兼容&#xff1b;由于…

postgresql14管理(二)-用户与角色

介绍 查看 SELECT rolname FROM pg_roles;postgres是系统初始化时默认创建的角色&#xff0c;为超级管理员。 \duList of rolesRole name | Attributes | Member of ------------------------------------------------------…

Kafka - 异步/同步发送API

文章目录 异步发送普通异步发送异步发送流程Code 带回调函数的异步发送带回调函数的异步发送流程Code 同步发送API 异步发送 普通异步发送 需求&#xff1a;创建Kafka生产者&#xff0c;采用异步的方式发送到Kafka broker 异步发送流程 Code <!-- https://mvnrepository…

墨西哥专线大型工程设备海运

随着全球经济一体化的不断推进&#xff0c;国际贸易日益繁荣&#xff0c;跨国物流需求不断增长。墨西哥作为拉美地区的经济大国&#xff0c;拥有丰富的资源和庞大的市场&#xff0c;吸引了许多中国企业的投资。然而&#xff0c;由于地理位置的原因&#xff0c;许多大型工程设备…

23种设计模式【创建型模式】详细介绍之【建造者模式】

建造者模式&#xff1a;构建复杂对象的精妙设计 设计模式的分类和应用场景总结建造者模式&#xff1a;构建复杂对象的精妙设计建造者模式的核心思想建造者模式的参与者Java示例&#xff1a;建造者模式 设计模式的分类和应用场景总结 可以查看专栏设计模式&#xff1a;设计模式 …

Anaconda-2023版 下载安装配置(国内镜像+图文详解)

1、Anaconda 下载 1.1 国内镜像下载 Anaconda 是跨平台的&#xff0c;版本众多&#xff0c;小伙伴们按需下载。本文是Win11系统 下载途径一&#xff1a;官方网站 https://www.anaconda.com/download/ 下载途径二&#xff1a;国内清华镜像 https://mirrors.tuna.tsinghua.…

嵌入式基础

本篇文章主要转载自 嵌入式复习&#xff0c;便于自己复习使用。 1 基本概念 嵌入式系统概念&#xff1a;以应用为中心&#xff0c;以计算机为基础&#xff0c;软件、硬件可裁剪&#xff0c;功能、可靠性、成本、体积、功耗严格要求的专用计算机系统&#xff08;国内&#xff0…

Power BI 傻瓜入门 12. 抽取报表

本章内容包含&#xff1a; 设置报表采用各种报表过滤方法探索高级报表功能消化报表发布过程 将您可以使用Power BI创建的每个可视化视为为为数据集提供不同的见解。可视化也可以是独立的&#xff0c;也可以与许多其他可视化相结合。无论哪种方式&#xff0c;可视化的输出都是…

使用Typecho搭建个人博客网站,并内网穿透实现公网访问——“cpolar内网穿透”

使用Typecho搭建个人博客网站&#xff0c;并内网穿透实现公网访问 文章目录 使用Typecho搭建个人博客网站&#xff0c;并内网穿透实现公网访问前言1. 安装环境2. 下载Typecho3. 创建站点4. 访问Typecho5. 安装cpolar6. 远程访问Typecho7. 固定远程访问地址8. 配置typecho 前言 …

linux中断(中断一)

中断是操作系统中至关重要的机制&#xff0c;它能够显著提高系统的响应性能和并发处理能力。   中断是指在 CPU 正常运行期间&#xff0c;由外部或内部事件引起的一种机制。当中断发生时&#xff0c;CPU会停止当前正在执行的程序&#xff0c;并转而执行触发该中断的中断处理程…

drawio特性

drawio的特性 drawio是领先的基于Web技术的草图和图表功能功能的应用。 保证数据的安全 集成了各种不同的平台&#xff0c;和提供了在线的免费编辑器&#xff0c;可以使用app.diagrams.net来方案&#xff0c;drawio本身不会存储用户的数据。 随着互联网时代的发展&#xff0…

死锁是什么?如何避免?如何排查?为什么这样排查 详细总结

1.死锁是什么 多个线程访问资源 线程加锁不当 会造成死锁。导致所有线程被阻塞&#xff0c;且无法解开 2.死锁的产生原因 1.加锁后忘记解锁 2.重复加锁&#xff0c;造成死锁 3.B锁内部调用函数A &#xff0c;A运行是又加锁 导致A,B均无法运行 3.如何避免死锁 多检查…

【vector题解】杨辉三角 | 删除有序数组中的重复项 | 只出现一次的数字Ⅱ

杨辉三角 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1…

操作系统【OS】死锁

常考点 系统资源不足不是系统产生死锁的原因&#xff0c;资源不足只会对进程造成“饥饿”【详见王道操作系统书P153第4题】 A&#xff1a;资源不足和资源分配不足还是有区别的啦~ 死锁是什么&#xff1f; 死锁是多个进程因为竞争资源而造成的一种互相等待 为什么会出现死锁&…

软考系统架构师知识点集锦二:软件工程

一、考情分析 二、考点精讲 2.1 软件过程模型 &#xff08;1&#xff09;原型模型 典型的原型开发方法模型。适用于需求不明确的场景,可以帮助用户明确需求。可以分为[抛弃型原型]与[演化型原型] 原型模型两个阶段: 1、原型开发阶段;2、目标软件开发阶段。 &#x…

Unity报错:Microsoft Visual C# Compiler version

Unity报错:Microsoft Visual C# Compiler version 问题解决方案总结 问题 Microsoft Visual C# Compiler version 2.9.1.65535 (9d34608e) Copyright © Microsoft Corporation 切换版本或者使用老项目的时候可能会出现这个报错&#xff0c;这个报错就是项目设置的问题 …

计算机起源(三)

一、前言 计算机在完成了硬件和操作系统的构建后&#xff0c;最重要的一件事情就是要处理数据。在现代意义的数据库出现之前(20世纪60年代)&#xff0c;人们通过人工和文件系统的方式来存储、管理数据。在人工管理时期&#xff0c;人们常使用穿孔纸带来管理数据 &#xff0c;虽…

华为机试题:HJ4 字符串分隔

目录 第一章、算法题1.1&#xff09;题目描述1.2&#xff09;解题思路与答案1.3&#xff09;牛客链接 友情提醒: 先看文章目录&#xff0c;大致了解文章知识点结构&#xff0c;点击文章目录可直接跳转到文章指定位置。 第一章、算法题 1.1&#xff09;题目描述 题目描述&…

前端html+css+js实现的2048小游戏,很完善。

源码下载地址 支持&#xff1a;远程部署/安装/调试、讲解、二次开发/修改/定制 逻辑用的是JavaScript&#xff0c;界面用canvas实现&#xff0c;暂时还没有添加动画。 视频浏览地址

mac安装并使用wireshark

mac安装并使用wireshark 1 介绍 我们在日常开发过程中&#xff0c;遇到了棘手的问题时&#xff0c;免不了查看具体网络请求情况&#xff0c;这个时候就需要用到抓包工具。比较著名的抓包工具就属&#xff1a;wireshark、fildder。我这里主要介绍wireshark。 2 安装 以mac安装为…