【华为OD-E卷-取出尽量少的球 100分(python、java、c++、js、c)】

server/2024/12/26 20:32:15/

pythonjavacjsc_0">【华为OD-E卷-取出尽量少的球 200分(pythonjava、c++、js、c)】

题目

某部门开展 Family Day 开放日活动,其中有个从桶里取球的游戏,游戏规则如下:
有 N 个容量一样的小桶等距排开,且每个小桶都默认装了数量不等的小球,每个小桶装的小球数量记录在数组 bucketBallNums 中,
游戏开始时,要求所有桶的小球总数不能超过 SUM,如果小球总数超过 SUM,则需对所有的小桶统一设置一个容量最大值 maxCapacity,并需将超过容量最大值的小球拿出来,直至小桶里的小球数量小于 maxCapacity。
请您根据输入的数据,计算从每个小桶里拿出的小球数量?
限制规则一:所有小桶的小球总和小于 SUM,则无需设置容量值 maxCapacity,并且无需从小桶中拿球出来,返回结果[] 限制规则二:如果所有小桶的小球总和大于 SUM,则需设置容量最大值 maxCapacity,并且需从小桶中拿球出来,返回从每个小桶拿出的小球数量组成的数组

输入描述

  • 第一行输入 2 个正整数,数字之间使用空格隔开,其中:

第一个数字表示 SUM 第二个数字表示 bucketBallNums 数组长度 第二行输入 N 个正整数,数字之间使用空格隔开,表示 bucketBallNums 的每一项

输出描述

  • 从每个小桶里拿出的小球数量,并使用一维数组表示

备注

  • 1 ≤ bucketBallNums[i] ≤ 10^9 1 ≤ bucketBallNums.length = N ≤ 10^5 1 ≤ maxCapacity ≤ 10^9 1 ≤ SUM ≤ 10^9

用例

用例一:
输入:
14 7
2 3 2 5 5 1 4
输出:
[0,1,0,3,3,0,2]
用例二:
输入:
3 3
1 2 3
输出:
[0,1,2]
用例三:
输入:
6 2
3 2
输出:
[]

python_71">python解法

  • 解题思路:
  • 输入解析:从用户输入中解析出总容量total、数组长度length和包含球的数量的数组balls。
    目标:调整balls中每个元素的数量,确保调整后的总和小于或等于total,并返回移除的球的数量数组。
    二分搜索优化:
    用二分法计算调整的临界值min_capacity和max_capacity,逐步缩小范围以找到满足条件的分配方案。
    每次尝试一个中间值mid_capacity,计算每个桶需要移除的数量,如果结果不满足条件,则调整搜索范围。
    输出结果:返回移除的球的数量数组。
python">def parse_input():# 解析输入,获取总容量、数组长度和球的数量数组total, length = map(int, input().split())  # 输入总容量和数组长度balls = list(map(int, input().split()))    # 输入每个桶的球数量return total, length, ballsdef calculate_removed_balls(total, balls, length):current_sum = sum(balls)  # 计算当前球的总数if current_sum <= total:return "[]"  # 如果总数已经小于或等于总容量,无需移除max_capacity = max(balls)          # 最大球数量min_capacity = total // length     # 计算理论上的最小分配容量# 初始结果数组,计算每个桶超出的球数量result = [x - min_capacity if x > min_capacity else 0 for x in balls]# 使用二分搜索优化移除球的数量while max_capacity - min_capacity > 1:mid_capacity = (max_capacity + min_capacity) // 2  # 计算中间值# 临时结果数组,假设移除到 mid_capacitytmp_result = [x - mid_capacity if x > mid_capacity else 0 for x in balls]remaining_sum = current_sum - sum(tmp_result)  # 计算移除后的总和if remaining_sum > total:max_capacity = mid_capacity  # 总和仍大于总容量,减少容量elif remaining_sum < total:min_capacity = mid_capacity  # 总和小于总容量,增加容量result = tmp_result          # 更新结果数组else:result = tmp_result  # 精确匹配,直接返回结果break# 返回结果数组的字符串形式return "[" + ",".join(map(str, result)) + "]"def main():total, length, balls = parse_input()  # 解析输入print(calculate_removed_balls(total, balls, length))  # 计算并输出结果if __name__ == "__main__":main()

java_127">java解法

  • 解题思路
java">更新中

C++解法

  • 解题思路
更新中

C解法

  • 解题思路

更新中

JS解法

  • 解题思路

javascript">更新中

注意:

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


http://www.ppmy.cn/server/153425.html

相关文章

小程序租赁系统开发指南与实现策略

内容概要 在如今这个快节奏的时代&#xff0c;小程序租赁系统的开发正逐渐成为许多商家提升服务质量与效率的重要选择。在设计这样一个系统时&#xff0c;首先要明白它的核心目标&#xff1a;便捷、安全。用户希望在最短的时间内找到需要的物品&#xff0c;而商家则希望通过这…

使用Excel制作通达信自定义外部数据,安排!!!

Excel相信大家电脑上都有这个工具&#xff0c;相比敲编程代码&#xff0c;用这个去做自定义数据对大多数人&#xff0c;应该是比较友好的。自定义数据分为外部序列数据&#xff0c;看了一下内容理解起来比较多&#xff0c;分两期给大家介绍。为了照顾电脑基础薄弱的朋友&#x…

一起学Git【第二节:创建版本库】

创建库 这个库相当于一个目录&#xff0c;目录中的文件都被Git管理&#xff0c;会记录每个文件的修改删除和添加工作&#xff0c;便于之后随时跟踪历史记录还原到之前的某一版本。如何创建库呢&#xff1f;有两种方式&#xff0c;本地创建库和云端克隆一个库。 1.本地创建库 …

37.2 prometheus分析接口源码讲解

本节重点介绍 : 获取配置文件 config获取运行信息 runtimeinfo编译的信息 buildinfotsdb统计信息 tsdbwalreplay的信息target统计信息获取metrics的元信息 状态信息相关 获取配置文件 path /api/v1/status/config代码位置 D:\go_path\src\github.com\prometheus\prometheus…

1. 深度学习介绍

深度学习关系 如下图&#xff0c;深度学习是机器学习的一部分 深度学习怎么个“深度”法 传统机器学习不能主动进行特征学习&#xff0c;需要人为进行特征工程提取特征&#xff0c;所以只是浅层学习。 而深度学习可以自动学习特征。 也就是说&#xff1a;深度学习传动机器学…

Java语言的网络编程

Java语言的网络编程 网络编程是现代软件开发中不可或缺的一部分。随着互联网的普及和信息技术的发展&#xff0c;网络编程的应用越来越广泛。Java语言以其平台独立性、强大的库支持和简洁的语法&#xff0c;成为了网络编程的热门选择。本文将深入探讨Java网络编程的基本概念、…

linux创建虚拟串口

要将一个终端bash作为串口&#xff0c;并使其可以被pyserial打开&#xff0c;你可以使用 socat 工具。socat 是一个多功能的网络工具&#xff0c;可以创建虚拟串口对。以下是具体步骤&#xff1a; 安装 socat&#xff1a; bash复制代码 sudo apt-get install socat 创建虚拟串…

某科技局国产服务器PVE虚拟化技术文档

环境介绍 硬件配置 服务器品牌&#xff1a;黄河 型号&#xff1a;Huanghe 2280 V2 Cpu型号&#xff1a;kunpeng-920 磁盘信息 :480SSD * 2 ,4T*4 网卡&#xff1a;板载四口千兆 如下表 四台服务器同等型号配置&#xff0c;均做单节点虚拟化&#xff0c;数据保护采用底层r…