华为OD机试 - 篮球比赛 - 递归(Java 2024 E卷 100分)

在这里插入图片描述

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

专栏导读

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

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

篮球(5V5)比赛中,每个球员拥有一个战斗力,每个队伍的所有球员战斗力之和为该队伍的总体战斗力。

现在10个球员准备分为两队进行训练赛,教练希望2个队伍的战斗力差值的绝对值尽可能的小,以达到最佳训练效果。

给出10个球员的战斗力,如果你是教练,你该如何分队,才能达到最佳训练效果?请说出该分队方案下的最小战斗力差值。

二、输入描述

10个篮球队员的战斗力(整数,范围[1,10000]),战斗力之间用空格分隔,如: 10 9 8 7 6 5 4 3 2 1
不需要考虑异常输入的场景。

三、输出描述

最小的战斗力差值,如: 1

四、测试用例

测试用例1:

1、输入

10 9 8 7 6 5 4 3 2 1

2、输出

1

3、说明

1 2 5 9 10分为一队,3 4 6 7 8分为一队,两队战斗力之差最小,输出差值1。备注:球员分队方案不唯一,但最小战斗力差值固定是1

测试用例2:

1、输入

1 1 1 1 1 1 1 1 1 1

2、输出

0

3、说明

所有球员战斗力相同,任意分队差值为0。

五、解题思路

在递归过程中选择或不选择当前球员,构建所有可能的组合。

递归回溯能够有效地遍历所有可能的组合,适用于小规模问题。

  1. 使用 Scanner 从标准输入读取10个整数,代表10个球员的战斗力,并存储在 strengths 数组中。
  2. 遍历 strengths 数组,计算所有球员的总战斗力 totalSum。
  3. 设置 minDifference 为 Integer.MAX_VALUE,用于存储最小的战斗力差值。
  4. 使用递归函数 findMinDifference 生成所有可能的5人组合。
  5. 对于每一个5人组合,计算其战斗力和 currentSum,然后计算差值 |2*currentSum - totalSum|。
  6. 更新 minDifference,保持最小的差值。
  7. 最终输出 minDifference,即最小的战斗力差值。

六、Java算法源码

public class OdTest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 读取10个球员的战斗力,并存储在数组中int[] strengths = new int[10];for (int i = 0; i < 10; i++) {strengths[i] = sc.nextInt();}// 计算所有球员的总战斗力int totalSum = 0;for (int strength : strengths) {totalSum += strength;}// 初始化最小差值为一个很大的数int minDifference = Integer.MAX_VALUE;// 使用递归生成所有5人组合,并计算最小差值minDifference = findMinDifference(strengths, 0, 0, 0, 5, totalSum, minDifference);// 输出最小战斗力差值System.out.println(minDifference);sc.close();}/*** 递归函数,生成所有5人组合,并计算最小差值* @param strengths 球员战斗力数组* @param index 当前考虑的球员索引* @param currentSum 当前组合的战斗力和* @param count 当前组合中的球员数量* @param target 目标球员数量(5人)* @param totalSum 所有球员的总战斗力* @param minDifference 当前最小差值* @return 更新后的最小差值*/private static int findMinDifference(int[] strengths, int index, int currentSum, int count, int target, int totalSum, int minDifference) {// 当组合达到目标人数时,计算差值if (count == target) {int difference = Math.abs((2 * currentSum) - totalSum);return Math.min(minDifference, difference);}// 如果剩余球员不足以完成目标组合,返回当前最小差值if (index >= strengths.length) {return minDifference;}// 选择当前球员加入组合minDifference = findMinDifference(strengths, index + 1, currentSum + strengths[index], count + 1, target, totalSum, minDifference);// 不选择当前球员,继续递归minDifference = findMinDifference(strengths, index + 1, currentSum, count, target, totalSum, minDifference);return minDifference;}
}

七、效果展示

1、输入

1 5 7 1 9 33 20 11 55 100

2、输出

2

3、说明

  1. 计算所有球员的总战斗力:1 + 5 + 7 + 1 + 9 + 33 + 20 + 11 + 55 + 100 = 242
  2. 理想情况下,我们希望将总战斗力尽量平均分配到两个队伍中,即每个队伍的战斗力接近:242 / 2 = 121
  3. 因此,我们的目标是找到一个5人组合,使其战斗力和尽可能接近121,从而使得另一个队伍的战斗力和也接近121,最终实现最小的差值。
  4. 为了达到最小差值,我们需要找到一个5人组合,其战斗力和为120或122
  5. 经过仔细组合和计算,我们发现以下分组方案能够达到最小差值2:
    • 100, 1, 1, 7, 11 = 120
    • 5, 9, 20, 33, 55 = 122

通过上述分组,我们达到了两个队伍的战斗力和分别为120和122,差值为2。

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 E卷 200分)

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

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx超简洁知识:负载均衡-反向代理,动静分离,配置文件

首先介绍一下为什么需要nginx&#xff1f; 在低并发场景下&#xff08;也就是用户量特别少的情况下&#xff09;&#xff0c;我们只需要部署一台服务器就能满足用户数量少的需求。 但是如果用户量逐渐增多&#xff0c;只有一台服务器是不够的。于是我们需要部署多台服务器。 …

juzigei/基于Java语言的充电桩系统(充电桩小程序+充电桩管理平台)

简述 SpringBoot 框架&#xff0c;充电桩平台充电桩系统充电平台充电桩互联互通协议云快充协议1.5新能源汽车电动自行车公交车-四轮车充电充电源代码充电平台源码Java源码无加密项目 介绍 云快充协议云快充1.5协议云快充协议开源代码云快充底层协议云快充桩直连桩直连协议充…

长短期记忆网络(Long Short-Term Memory,LSTM)

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 长短期记忆网络&#xff08;Long Short-Term Memory&#xff0c;简称LSTM&#xff09;是一种特殊的循环神经网络&#xff08;Recurrent Neural Network&#xff0c;简称RNN&#xff09;架构&#…

【Qt】Windows下Qt连接DM数据库

环境信息&#xff1a;W11 Qt5.12及以上 dm8 QODBC达梦 Windows环境创建ODBC数据源 使用 ODBC 方法访问 DM 数据库服务器之前&#xff0c;必须先配置 ODBC 数据源 在控制面板Windows工具中显示ODBC数据源管理器 ODBC数据源管理器标签 用户 DSN&#xff1a;添加、删除或配置本…

安达发|氢能源产业与APS生产排程软件的结合

氢能产业&#xff0c;作为一种科技与资本密集型行业&#xff0c;覆盖新材料、电力装备、新能源汽车、航空航天以及国防军工等多个领域&#xff0c;对于推动传统产业的转型升级及新兴产业链的形成具有显著作用。氢能的应用领域广泛&#xff0c;主要可划分为交通、工业、发电和储…

软件设计模式------抽象工厂模式

抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;&#xff0c;又称Kit模式&#xff0c;属于对象创建型模式。 一&#xff1a;先理解两个概念&#xff1a; &#xff08;1&#xff09;产品等级结构&#xff1a; 即产品的继承结构。 通俗来讲&#xff0c;就是不同品…

php中的错误和异常捕获

目录 一&#xff1a; 异常&#xff08;Exceptions&#xff09; 二&#xff1a; 错误&#xff08;Errors&#xff09; 三&#xff1a;实际项目的异常和错误处理 在PHP中&#xff0c;异常&#xff08;Exceptions&#xff09;和错误&#xff08;Errors&#xff09;是两个不同的…

vuex的store应用

1.在pakage.json加一行 2.和main同级别加一个js文件 import Vue from vue import Vuex from vuexVue.use(Vuex)export default new Vuex.Store({state: {langFlag: new Date().getTime()},mutations: {setLangFlag(state) {state.langFlag new Date().getTime()}} })3.在mai…

NewStarCTF2024-Week2-Misc-WP

目录 1、wireshark_checkin 2、wireshark_secret 3、字里行间的秘密 4、你也玩原神吗 5、Hertas Study 6、用溯流仪见证伏特台风 7、热心助人的小明 1、wireshark_checkin 直接字符串搜 flag flag{ez_traffic_analyze_isnt_it} 2、wireshark_secret 查看原始数据 导出十…

「C/C++」C++ STL容器库 之 std::map 键值对的集合容器

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

鸿蒙网络编程系列25-TCP回声服务器的实现

1. TCP回声服务器实现可行性 在前文鸿蒙网络编程系列2-UDP回声服务器的实现中&#xff0c;介绍了什么是回声服务器&#xff0c;并且基于UDP协议实现了一个简单的回声服务器&#xff0c;本节将基于TCP协议实现一个类似的回声服务器。在鸿蒙API10以后&#xff0c;提供了TCPSocke…

【C++】使用vscode进行 C/C++ 开发,内含c_cpp_properties.json、launch.json 和 tasks.json解释

在 Visual Studio Code (VSCode) 中进行 C/C 开发时&#xff0c;这三个 .json 文件&#xff08;c_cpp_properties.json、launch.json 和 tasks.json&#xff09;分别用于配置编译、调试和代码提示等功能。它们是 VSCode 配置环境的一部分&#xff0c;由 C/C 扩展生成&#xff0…

将java项目jar包打包成exe服务

1.结构展示 2.注意事项 前提: 环境准备:jdk8 和 .net支持 { 1.控制面板》程序和功能》启用和关闭windows功能》.net的勾选》2.jdk8自行百度安装环境3.其他项目必须的软件环境安装等&#xff08;数据库...&#xff09; }第一次准备: 1.将打包好的jar包放到premiumServices.exe…

智和信通助力某大型服饰集团建设综合监控运维

某大型服饰集团成立于90年代&#xff0c;是广受认可的国民生活时尚品牌&#xff0c;近年来随着集团公司业务规模的不断扩大&#xff0c;信息化作为支撑集团公司业务发展的重要技术手段&#xff0c;信息系统无论在规模上还是在复杂程度上均有了很大程度的增加。 项目现状 当前信…

计算机网络—vlan(虚拟局域网)

内容补充 冲突域 如果两台设备同时发送数据&#xff0c;他们的数据会互相干扰&#xff0c;那么他们就处于同一冲突域&#xff0c;例如集线器&#xff08;总线型&#xff0c;所有设备共享带宽&#xff09;的所有端口都处于冲突域。 广播域 如果一台设备发送数据&#xff0c;…

babylonjs shader学习之copy shadertoy案例

shadertoy案例&#xff1a; 准备 const onSceneReady (scene: Scene) > {const light new HemisphericLight(light, new Vector3(0, 1, 0), scene);light.intensity 0.7;Effect.ShadersStore[planeMatVertexShader] precision highp float;attribute vec3 position;attr…

单片机输出方波

从P1.0上输出一个方波,高电平5ms&#xff0c;低电平10ms. &#xff03;include〈reg51。h〉 unsigned char flag; sbit outP1^0&#xff1b; void main() &#xff5b; flag0&#xff1b; TMOD0X02; TH06&#xff1b; TL06; TR01&#xff1b; EA1&#xff1b; ET0…

Redis JSON介绍和命令大全

Redis JSON介绍和命令大全 Redis JSON先说说JSON是什么再说说JSON Path先推荐两个网站JSONPath JAVA clents Redis JSON 安装内存json命令语法命令url命令解释JSON.ARRAPPENDJSON.ARRINDEXJSON.ARRINSERTJSON.ARRLENJSON.ARRPOPJSON.ARRTRIMJSON.CLEARJSON.DEBUG MEMORYJSON.DE…

centOS部署Jenkins实现项目可持续自动化部署

个人看的是尚硅谷的视频&#xff0c;跟着实战&#xff0c;但因为视频是21年的&#xff0c;所以很容易出现jenkins插件不适配问题。 因而个人直接用较新版的jdk和jenkins. 先切换到root用户 sudo su一、安装jdk 先查询可安装版本 yum list java*安装jdk&#xff08;只复制圈…

【算法】归并排序概念及例题运用

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…