华为OD机试真题 Java 实现【整理扑克牌】【2023Q1 100分】

news2024/11/14 16:06:38

在这里插入图片描述

一、题目描述

给定一组数字,表示扑克牌的牌面数字,忽略扑克牌的花色,请按如下规则对这一组扑克牌进行整理:

步骤1

对扑克牌进行分组,形成组合牌,规则如下:

  1. 当牌面数字相同张数大于等于4时,组合牌为“炸弹”;
  2. 3张相同牌面数字 + 2张相同牌面数字,且3张牌与2张牌不相同时,组合牌为“葫芦”;
  3. 3张相同牌面数字,组合牌为“三张”;
  4. 2张相同牌面数字,组合牌为“对子”;
  5. 剩余没有相同的牌,则为“单张”;

步骤2

对上述组合牌进行由大到小排列,规则如下:

  1. 不同类型组合牌之间由大到小排列规则:“炸弹” > “葫芦” > “三张” > “对子” > “单张”;
  2. 相同类型组合牌之间,除“葫芦”外,按组合牌全部牌面数字加总由大到小排列;
  3. “葫芦”则先按3张相同牌面数字加总由大到小排列,3张相同牌面数字加总相同时,再按另外2张牌面数字加总由大到小排列;
  4. 由于“葫芦”>“三张”,因此如果能形成更大的组合牌,也可以将“三张”拆分为2张和1张,其中的2张可以和其它“三张”重新组合成“葫芦”,剩下的1张为“单张”。

步骤3

当存在多个可能组合方案时,按如下规则排序取最大的一个组合方案:

  1. 依次对组合方案中的组合牌进行大小比较,规则同上;
  2. 当组合方案A中的第n个组合牌大于组合方案B中的第n个组合牌时,组合方案A大于组合方案B;

二、输入描述

5 2 5 4 1 3 4 3 3 2 5 4 5

三、输出描述

5 5 5 5 4 4 4 3 3 2 2 3 1

四、Java算法源码

public static void main(String[] args) {
    // 处理输入
    Scanner in = new Scanner(System.in);
    List<Integer> nums = Arrays.stream(in.nextLine().split(" "))
            .map(Integer::parseInt)
            .collect(Collectors.toList());

    //key:牌面点数,value:该点数的张数
    Map<Integer, Integer> map = new HashMap<>();
    for (int num : nums) {
        map.put(num, map.getOrDefault(num, 0) + 1);
    }

    // 先按张数排序,再按点数排序
    List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
    list.sort((a, b) -> {
        if (b.getValue() == a.getValue()) {
            return b.getKey() - a.getKey();
        }
        return b.getValue() - a.getValue();
    });

    StringBuilder builder = new StringBuilder();
    List<Integer> splitList = new ArrayList<>();
    for (int i = 0; i < list.size(); i++) {
        Map.Entry<Integer, Integer> temp = list.get(i);
        int num = temp.getKey();
        int count = temp.getValue();
        // 由于“葫芦”>“三张”,因此如果能形成更大的组合牌,也可以将“三张”拆分为2张和1张,
        // 其中的2张可以和其它“三张”重新组合成“葫芦”,剩下的1张为“单张”。
        if (i > 0 && list.get(i - 1).getValue() == 3 && count == 3) {
            splitList.add(num);
            count = 2;
            temp.setValue(2);
        } else if (count == 1 && splitList.size() != 0) {
            for (int k = 0; k < splitList.size(); k++) {
                if (splitList.get(k) > num) {
                    builder.append(splitList.get(k) + " ");
                    splitList.remove(k);
                    k--;
                }
            }
        }
        for (int j = 0; j < count; j++) {
            builder.append(num + " ");
        }
    }

    if (splitList.size() != 0) {
        for (int i : splitList) {
            builder.append(i + " ");
        }
    }
    System.out.println(builder.substring(0, builder.length() - 1));
}

五、效果展示

1、输入

5 2 5 4 1 3 4 3 3 2 5 4 5

2、输出

5 5 5 5 4 4 4 3 3 2 2 3 1

3、说明

  1. “炸弹” > “葫芦” > “三张” > “对子” > “单张”;
  2. 由于“葫芦”>“三张”,因此如果能形成更大的组合牌,也可以将“三张”拆分为2张和1张,其中的2张可以和其它“三张”重新组合成“葫芦”,剩下的1张为“单张”。

5 5 5 5为炸弹

4 4 4 + 3 3 为葫芦,故将3 3 3 三张拆分。

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【货币单位换算】【2023Q1 100分】

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

在这里插入图片描述

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

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

相关文章

【FPGA】Verilog:锁存器 Latch | RS Flip-Flop 与 D Flip-Flop 的实现

&#x1f4ad; 写在前面&#xff1a;本章将理解 RS/D 锁存器的概念&#xff0c;了解 RS/D/JK 触发器的概念&#xff0c;使用 Verilog 实现各种锁存器 (Latch) 和翻转器 (Flip-Flop)&#xff0c;并通过 FPGA 验证用 Verilog 的实现。 &#x1f4dc; 本章目录&#xff1a; Ⅰ. …

Java中synchronized的优化

本文介绍为了实现高效并发&#xff0c;虚拟机对 synchronized 做的一系列的锁优化措施 高效并发是从 JDK5 升级到 JDK6 后一项重要的改进项&#xff0c;HotSpot 虚拟机开发团队在 JDK6 这个版本上花费了大量的资源去实现各种锁优化技术&#xff0c;如适应性自旋&#xff08;Ada…

【fly-iot飞凡物联】(6):通过docker镜像使用gitbook启动ActorCloud项目文档,发现是个IOT功能非常丰富的项目,可以继续研究下去。

目录 前言1&#xff0c;关于 ActorCloud 使用手册2&#xff0c;使用docker 构建文档4&#xff0c;或者使用别人的gitbook镜像5&#xff0c;总结 前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/108971807 fly-iot飞凡物联专栏&#xff1a; https://…

含sop的配电网重构(含风光|可多时段拓展)

目录 1 主要内容 2 部分程序 3 下载链接 1 主要内容 之前分享了很多配电网重构的程序&#xff0c;每个程序针对场景限定性比较大&#xff0c;程序初学者修改起来难度较大&#xff0c;本次分享一个基础程序&#xff0c;针对含sop的配电网重构模型&#xff0c;含风电和光伏&…

skywalking安全认证问题

skywalking安全认证 一、问题二、步骤2.1 skywalking-aop配置文件修改2.2 agent配置文件修改 一、问题 在springboot项目使用java-agent接入skywalking时&#xff0c;为保证两者之间的数据安全传输&#xff0c;准备加个安全认证 参考文章&#xff1a; https://www.helloworld…

尝试探索水下目标检测,基于yolov5轻量级系列模型n/s/m开发构建海底生物检测系统

其实&#xff0c;水下目标检测相关的项目早在之前就已经做了几个了&#xff0c;但是没有系统性地对比过&#xff0c;感兴趣的话可以先看下之前的文章&#xff0c;如下&#xff1a; 《基于自建数据集【海底生物检测】使用YOLOv5-v6.1/2版本构建目标检测模型超详细教程》 《基于…

Qt编写视频监控系统73-不同视频流不同类型的判断和解析(http/m3u8/rtsp/rtmp等)

一、前言 这套视频监控系统大概从2018年起步整体框架&#xff0c;一步步积累到现在&#xff0c;中间经历了无数次的各种视频文件、视频流、视频设备的播放测试&#xff0c;比如光视频文件就有mp4/wmv/rmvb/mkv/avi等格式&#xff0c;视频设备有本地USB摄像头、桌面等&#xff…

【k8s】【ELK】【zookeeper+kafka+efak】日志环境部署

1、日志收集基本概念 k8s中pod的路径&#xff1a; containers log: /var/log/containers/*.log Pod log&#xff1a; /var/log/pods docker log: /var/lib/docker/containers/*/*.log如何收集日志 使用 EFKLogstashKafka 1、filebeat读取容器中的日志&#xff0c;然后写入K…

camunda如何发布和调用rest服务接口

一、camunda如何发布rest服务接口 Camunda BPM 平台本身提供了 REST API 接口&#xff0c;可以用于管理和操作 Camunda 平台中的各种资源和数据&#xff0c;如流程定义、流程实例、任务等。因此&#xff0c;我们可以通过编写 Camunda 应用程序的方式&#xff0c;将 Camunda RE…

Ubuntu系统远程桌面安装运行记录

Ubuntu系统远程桌面安装运行记录 分别测试了20.04和22.04两个版本 一、widows远程 参考连接https://blog.csdn.net/qq_50263172/article/details/128465149 安装步骤如下&#xff1a; sudo apt-get install xrdpsudo apt install tightvncserversudo apt-get install xubuntu-…

CSS基础-超详解

目录 什么是CSS? CSS的引入方式 内部样式 外部样式 内联样式 CSS选择器 CSS标签选择器 类选择器 id选择器 通配符选择器 CSS属性设置 字体 文本 什么是CSS? CSS也被叫做层叠样式表, 英文全称为: Cascading Style Sheets, 是一种用来表现HTML(标准通用标记语言的一个应用)…

【云原生】k8s管理工具--Kubectl(二)

k8s管理工具--Kubectl&#xff08;二&#xff09; 一、项目生命周期1、项目生命周期2、创建kubectl run命令3、发布kubectl expose命令&#xff08;1&#xff09; Service的作用&#xff08;2&#xff09;Service的类型&#xff08;3&#xff09;查看Pod网络状态详细信息和Serv…

django 数据迁移makemigrations和migrate的备忘录

问题描述 之前成功生成过&#xff0c;重新执行python manage.py migrate后&#xff0c;数据库没有生成对应的数据表&#xff1b;表现为 Apply all migrations: admin, auth, contenttypes, sessions Running migrations:No migrations to apply.执行python manage.oy makemig…

STM32-光敏传感器实验

光敏传感器的主要是光敏二极管&#xff0c;核心是PN结&#xff0c;利用了光电效应&#xff0c;对光强很敏感&#xff0c;有单向导电性&#xff0c;工作时需要加反向电压。光照越强&#xff0c;等效电阻越小。 实验要求通过ADC3通道6&#xff08;PF8&#xff09;采集光敏二极管…

geoserver安装与发布服务过程

geoserver是做地图领域开发必会的插件之一&#xff0c;今天我们来分享多种安装方式与发布服务过程&#xff1a; 一、安装下载 1、官网地址&#xff1a;GeoServer 进入下载页面选择下载的版本&#xff0c;我这里选择2.22.3的稳定版本。 来到&#xff1a; 多种安装包可选&#…

科研er如何查询学术期刊分区信息?

文章目录 引言&#xff1a;为什么要查询学术期刊分区信息&#xff1f;1.使用LetPub查询1.1.LetPub简介1.2.查询步骤 2.使用《中科院文献情报中心期刊分区表》进行查询2.1.《中科院文献情报中心期刊分区表》简介2.2.查询步骤 引言&#xff1a;为什么要查询学术期刊分区信息&…

Linux man手册什么都找不到 常见问题总结

1.尝试安装缺少的page sudo yum[或者apt-get] install manpages-de manpages-de-dev manpages-dev glibc-doc manpages-posix-dev manpages-posix 安装成功后解决了没有pages的问题,如果还是查不到,则可能是找不到pages的问题 2.更新Gcc 或 G 后导致路径变化 man手册的所有…

每日一练 | 网络工程师软考真题 Day2

1、某工程制定的开发方案中定义了3个任务&#xff0c;其中任务A首先开始&#xff0c;且需要3周完成&#xff0c;任务周完B必须在任务A启动1周后开始&#xff0c;且需要2周完成&#xff0c;任务C必须在任务A后才能开始&#xff0c;且需要完成2周完成。该工程的进度安排可用下面的…

案例12:Java宠物医院预约管理系统设计与实现开题报告

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

CCF大数据与计算智能大赛-基于人工智能的漏洞数据分类冠军方案

基于人工智能的漏洞数据分类 前言 为及时跟踪国际信息安全趋势&#xff0c;需对国际公开的漏洞数据内容进行及时统计和梳理&#xff0c;例如CVE漏洞平台。CVE平台的漏洞信息包含有CVE编号、漏洞评分、漏洞描述等内容&#xff0c;其中漏洞描述含有对漏洞的利用条件、受影响的范…