【华为OD-E卷 - 篮球比赛 100分(python、java、c++、js、c)】

【华为OD-E卷 - 篮球比赛 100分(python、java、c++、js、c)】

题目

篮球(5V5)比赛中,每个球员拥有一个战斗力,每个队伍的所有球员战斗力之和为该队伍的总体战斗力。
现有10个球员准备分为两队进行训练赛,教练希望2个队伍的战斗力差值能够尽可能的小,以达到最佳训练效果。
给出10个球员的战斗力,如果你是教练,你该如何分队,才能达到最佳训练效果?请说出该分队方案下的最小战斗力差值

输入描述

  • 0个篮球队员的战斗力(整数,范围[1,10000]),战斗力之间用空格分隔,如:10987654321

不需要考虑异常输入的场景

输出描述

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

用例

用例一:
输入:
10 9 8 7 6 5 4 3 2 1
输出:
1

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

python解法

  • 解题思路:
  • 问题描述:给定一组球员的能力值,将球员分成两队,每队5人,要求两队的能力值之差的绝对值最小。返回最小的能力值差。

思路分析:

组合生成:用 itertools.combinations 生成所有可能的5人队伍。
能力值计算:计算当前组合的总能力值,另一队的能力值等于总能力减去当前组合的能力值。
差值比较:计算两队能力值的差的绝对值,并更新最小差值。
优化:由于组合生成的时间复杂度较高,适合用于小规模输入,10个球员的场景是可接受的

from itertools import combinationsdef get_min_diff_power(players):# 总能力值,所有球员的能力值求和total_power = sum(players)# 初始化最小差值为正无穷min_diff = float('inf')# 遍历所有可能的5人组合for team in combinations(players, 5):# 当前组合的能力值team_power = sum(team)# 另一队的能力值other_team_power = total_power - team_power# 更新最小差值min_diff = min(min_diff, abs(team_power - other_team_power))# 返回最小的能力值差return min_diff# 输入球员的能力值,使用空格分隔,转换为整数列表
players = list(map(int, input().split()))
# 输出最小能力值差
print(get_min_diff_power(players))

java解法

  • 解题思路

排序:对输入数组进行排序,方便处理和优化递归。
组合生成:通过递归生成所有可能的5人队伍,并计算其能力值的总和。
差值计算:利用队伍的能力值总和计算两队差值的绝对值。
最小值判断:通过 stream 找到最小差值并返回。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int[] nums = new int[10]; // 输入的10个球员的能力值for (int i = 0; i < 10; i++) {nums[i] = sc.nextInt(); // 依次读取能力值}// 输出最小的能力值差System.out.println(findMinDiff(nums));}// 寻找最小能力值差public static int findMinDiff(int[] nums) {Arrays.sort(nums); // 将数组排序,便于递归处理(可优化剪枝)ArrayList<Integer> teamSums = new ArrayList<>(); // 存储所有5人队伍的能力值总和calculateCombinations(nums, 0, 0, 0, teamSums); // 递归生成组合并计算能力值总和int totalSum = Arrays.stream(nums).sum(); // 计算所有球员的总能力值// 遍历所有组合能力值,计算两队能力值差,并返回最小值return teamSums.stream().map(subSum -> Math.abs(totalSum - 2 * subSum)) // totalSum - 2 * subSum 是差值公式.min(Integer::compare) // 找到最小值.orElse(0); // 若列表为空,返回0}// 递归生成所有可能的5人队伍,并计算能力值总和public static void calculateCombinations(int[] nums, int start, int depth, int sum, ArrayList<Integer> results) {if (depth == 5) { // 当选择了5人时,记录当前组合的能力值总和results.add(sum);return;}// 遍历当前起点之后的所有球员for (int i = start; i < 10; i++) {// 避免重复组合,例如相邻两个球员能力值相同时跳过if (i > start && nums[i] == nums[i - 1]) continue;// 递归选择下一个球员calculateCombinations(nums, i + 1, depth + 1, sum + nums[i], results);}}
}

C++解法

  • 解题思路
更新中

C解法

  • 解题思路

更新中

JS解法

  • 解题思路

  • 题目背景: 给定一个整数数组,要求将数组分为两个子集,使两个子集的元素和的差最小。

解题分析:

假设数组总和为 totalPower,子集1的和为 partialSum,子集2的和为 totalPower - partialSum。
差值为 Math.abs(totalPower - 2 * partialSum)。
目标是找到一个 partialSum,使得上述差值最小。
解决方法:

遍历所有可能的子集,计算每个子集的和。
用递归的方法生成所有可能的子集和。
对于每种可能的子集和,计算差值并找到最小值。
优化:

使用一个数组保存所有的子集和,避免重复计算。
由于组合的数量较大,可以通过限制子集的大小(如限制子集大小为5)来减少计算量。

const readline = require("readline"); // 引入 readline 模块,用于处理标准输入输出// 创建一个 readline 接口,用于从命令行读取输入
const rl = readline.createInterface({input: process.stdin, // 标准输入output: process.stdout, // 标准输出
});// 监听每一行输入
rl.on("line", (line) => {const arr = line.split(" ").map(Number); // 将输入的字符串分割成数组,并转换为数字console.log(findMinDifference(arr)); // 调用函数计算最小差值,并打印结果
});/*** 主函数:找到两个子集和的最小差值* @param {number[]} arr 输入的整数数组* @returns {number} 最小差值*/
function findMinDifference(arr) {arr.sort((a, b) => a - b); // 对数组进行排序,便于后续处理const allCombinations = []; // 存储所有子集和findCombinations(arr, 0, 0, 0, allCombinations); // 调用递归函数生成所有可能的子集和const totalPower = arr.reduce((acc, val) => acc + val, 0); // 计算数组的总和// 遍历所有子集和,计算差值并返回最小差值return allCombinations.map((partialSum) => Math.abs(totalPower - 2 * partialSum)) // 计算每种子集和的差值.sort((a, b) => a - b)[0]; // 返回最小差值
}/*** 递归函数:生成所有可能的子集和* @param {number[]} arr 输入数组* @param {number} start 当前起始索引* @param {number} depth 当前子集的深度* @param {number} partialSum 当前子集的和* @param {number[]} result 保存所有子集和的数组*/
function findCombinations(arr, start, depth, partialSum, result) {if (depth === 5) { // 如果当前子集的大小达到5result.push(partialSum); // 将当前子集的和加入结果数组return; // 结束当前递归}// 遍历数组中的每个元素,从 start 开始for (let i = start; i < arr.length; i++) {findCombinations(arr, i + 1, depth + 1, partialSum + arr[i], result); // 递归:选择当前元素,更新索引、深度和子集和}
}

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

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

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

相关文章

C++【深入底层,从零模拟实现string类】

在学习了类和对象、模板等前期的C基础知识之后&#xff0c;我们可以尝试根据C标准库中所提供的接口类型&#xff0c;来搭建我们自己的string类型。这个过程有助于初学者掌握C的基础语法及底层逻辑。 框架的搭建 首先搭建模型的基础框架&#xff0c;需要建立my_string.h和my_st…

切忌 SELECT *,就算表只有一列

原文地址 尽量避免 SELECT *&#xff0c;即使在单列表上也是如此 – 如果你现在不同意这一点&#xff0c;读完这篇文章&#xff0c;你可能就要动摇了。 2012年的一个故事 这是我 12 年前&#xff08;约 2012-2013 年&#xff09;在客户后台应用程序中遇到的一个真实故事。 当…

DEV C++软件下载

一、进入网站 https://sourceforge.net/projects/orwelldevcpp/ 二、点击下载 三、安装步骤 1、点击 “OK” 2、点击“I agree” 3、点击“Next” 4、按步骤切换路径&#xff0c;本文选在D盘&#xff0c;可自行选取文件路径 5、等待安装 6、点击完成 7、选择语言 8、点击“N…

OpenBSD之安装指南

安装介质下载 OpenBSD的官网下载地址&#xff1a;https://www.openbsd.org/faq/faq4.html#Download&#xff0c;同时也是《OpenBSD FAQ - Installation Guide》。长篇大论了很多&#xff0c;每一个章节都能看懂是干嘛的&#xff0c;连起来就容易晕。并且是英文的&#xff0c;要…

Vue.config.productionTip = false 不起作用的问题及解决

文章目录 一、问题描述二、解决方法 一、问题描述 当我们在代码页面上引入Vue.js(开发版本)时&#xff0c;运行代码会出现以下提示&#xff0c;这句话的意思是&#xff1a;您正在开发模式下运行Vue&#xff0c;在进行生产部署时&#xff0c;请确保打开生产模式 You are runni…

C#,图论与图算法,输出无向图“欧拉路径”的弗勒里(Fleury Algorithm)算法和源程序

1 欧拉路径 欧拉路径是图中每一条边只访问一次的路径。欧拉回路是在同一顶点上开始和结束的欧拉路径。 这里展示一种输出欧拉路径或回路的算法。 以下是Fleury用于打印欧拉轨迹或循环的算法&#xff08;源&#xff09;。 1、确保图形有0个或2个奇数顶点。2、如果有0个奇数顶…

oracle闪回表

文章目录 闪回表案例1&#xff1a;&#xff08;未清理回收站时的闪回表--成功&#xff09;案例2&#xff08;清理回收站时的闪回表--失败&#xff09;案例3&#xff1a;彻底删除表&#xff08;不经过回收站--失败&#xff09;案例4&#xff1a;闪回表之后重新命名新表总结1、删…

CSS——22.静态伪类(伪类是选择不同元素状态)

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>静态伪类</title> </head><body><a href"#">我爱学习</a></body> </html>单击链接前的样式 左键单击&#xff08;且…

Java Spring Boot实现基于URL + IP访问频率限制

点击下载《Java Spring Boot实现基于URL IP访问频率限制(源代码)》 1. 引言 在现代 Web 应用中&#xff0c;接口被恶意刷新或暴力请求是一种常见的攻击手段。为了保护系统资源&#xff0c;防止服务器过载或服务不可用&#xff0c;需要对接口的访问频率进行限制。本文将介绍如…

数据结构(Java版)第七期:LinkedList与链表(二)

专栏&#xff1a;数据结构(Java版) 个人主页&#xff1a;手握风云 一、链表的实现&#xff08;补&#xff09; 接上一期&#xff0c;下面我们要实现删除所有值为key的元素&#xff0c;这时候有的老铁就会想用我们上一期中讲到的remove方法&#xff0c;循环使用remove方法&#…

C#Halcon找线封装

利用CreateMetrologyModel封装找线工具时&#xff0c;在后期实际应用调试时容易把检测极性搞混乱&#xff0c;造成检测偏差&#xff0c;基于此&#xff0c;此Demo增加画线后检测极性的指引&#xff0c;首先看一下效果 加载测试图片 画线 确定后指引效果 找线效果 修改显示 UI代…

ORB-SALM3配置流程及问题记录

目录 前言 一、OPB-SLAM3基本配置流程 1.下载编译Pangolin 二、ORB-SLAM3配置 1.下载源码 2.创建ROS工作空间并编译ORB-SLAM3-ROS源码 3.尝试编译 三、运行测试 一、OPB-SLAM3基本配置流程 ORB-SLAM3是一个支持视觉、视觉加惯导、混合地图的SLAM&#xff08;Simultane…

Unity2D初级背包设计后篇 拓展举例与不足分析

Unity2D初级背包设计中篇 MVC分层撰写(万字详解)-CSDN博客、 如果你已经搞懂了中篇&#xff0c;那么对这个背包的拓展将极为简单&#xff0c;我就在这里举个例子吧 目录 1.添加物品描述信息 2.拓展思路与不足分析 1.没有删除只有丢弃功能&#xff0c;所以可以添加垃圾桶 2.格…

领域驱动设计(DDD)——限界上下文(Bounded Context)详解

限界上下文&#xff08;Bounded Context&#xff09;在 DDD 中的定义 在领域驱动设计&#xff08;DDD&#xff09;中&#xff0c;限界上下文&#xff08;Bounded Context&#xff09;是一个核心概念。它定义了领域模型的边界&#xff0c;帮助我们将复杂的业务系统划分成多个相对…

语音机器人外呼的缺点

也许是因为经济形式变差&#xff0c;大部分都是消费降级的策略。企业也一样&#xff0c;开源不行就只能重点节流。以前10个人做的工作&#xff0c;希望能用2个语音机器人就能完成。确实语音机器人是可以大幅提升外呼效率的&#xff0c;节约成本也很明显&#xff0c;但是今天不说…

基类指针指向派生类对象,基类指针的首地址永远指向子类从基类继承的基类首地址

文章目录 基类指针指向派生类对象&#xff0c;基类指针的首地址永远指向子类从基类继承的基类起始地址。代码代码2 基类指针指向派生类对象&#xff0c;基类指针的首地址永远指向子类从基类继承的基类起始地址。 代码 #include <iostream> using namespace std;class b…

Jenkins pipeline 发送邮件及包含附件

Jenkins pipeline 发送邮件及包含附件 设置邮箱开启SMTP服务 此处适用163 邮箱 开启POP3/SMTP服务通过短信获取TOKEN &#xff08;保存TOKEN, 后面Jenkins会用到&#xff09; Jenkins 邮箱设置 安装 Build Timestamp插件 设置全局凭证 Dashboard -> Manage Jenkins …

如何在 Ubuntu 22.04 上安装 Caddy Web 服务器教程

简介 Caddy 是一个开源的 Web 服务器&#xff0c;它支持静态和现代 Web 应用程序&#xff0c;使用预定义的配置规则&#xff0c;并为所有链接的域名自动启用 HTTPS。Caddy 使用 GO 语言编写&#xff0c;提供了用户友好的配置指令&#xff0c;使你既可以将其用作 Web 服务器&am…

RocketMQ 和 Kafka 有什么区别?

目录 RocketMQ 是什么? RocketMQ 和 Kafka 的区别 在架构上做减法 简化协调节点 简化分区 Kafka 的底层存储 RocketMQ 的底层存储 简化备份模型 在功能上做加法 消息过滤 支持事务 加入延时队列 加入死信队列 消息回溯 总结 来源:面试官:RocketMQ 和 Kafka 有…

使用docker-compose安装Redis的主从+哨兵模式

必看 本文是一主二从一哨兵模式&#xff1b;其余的单机/集群/多哨兵模式的话&#xff0c;不在本文... 本文的环境主要是&#xff1a;应用app在本地&#xff0c;redis在云服务器上&#xff1b; 图解 图如下&#xff1a;这个图很重要&#xff1b; 之所以要这样画图&#xff0…