9.20华为OD机试真题 新系统 – 字符串分组求和 (JavaPyCC++JsGo)
2026 华为OD机试真题9月20日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
给定一个字符串数组,每个字符串表示一个数字(可能包含正负号)。将数组中前 n 个成员按照绝对值大小分为以下几组,并计算每组数字总和:
- 第
1组:绝对值在 [0,100) 范围内的数字; - 第
2组:绝对值在 [100,1000) 范围内的数字; - 第
3组:绝对值在 [1000,10000) 范围内的数字; - 第
4组:绝对值在 [10000,+∞) 范围内的数字。
注意:数字按绝对值分组,但计算总和按实际正负数计算;输入保证每个字符串都是合法的整数格式,整数范围为 −10^6≤数值≤10^6;保证参数 n 小于等于数组长度。
2026 华为OD机试真题9月20日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
输入描述
输入共两行:
第一行输入整数 n,表示只处理数组中的前 n 个成员。
第二行输入以英文逗号分隔的整数,每个整数可能带正号或负号。
输出描述
输出一个长度为 4 的一维数组,依次表示第 1、2、3、4 组的元素总和。数组元素之间使用英文逗号分隔,不输出额外空格。
示例1
输入
5
-50,120,2000,50000,80
输出
[30,120,2000,50000]
说明
- 第
1组(绝对值 0-99):−50 和 80,和为 30- 第
2组(绝对值 100-999):120,和为 120- 第
3组(绝对值 1000-9999):2000,和为 2000- 第
4组(绝对值 ≥10000):50000,和为 50000注意:−50 在第
1组是因为其绝对值 50 在 [0,100) 范围内,而不是因为它是负数。
示例2
输入
4
0,100,1000,10000
输出
[0,100,1000,10000]
说明
- 第
1组(绝对值 0-99):0,和为 0- 第
2组(绝对值 100-999):100,和为 100- 第
3组(绝对值 1000-9999):1000,和为 1000- 第
4组(绝对值 ≥10000):10000,和为 10000注意:边界值 100 属于第
2组,1000 属于第3组,10000 属于第4组。
解题思路
本题只需要处理数组的前 n 个数字。对于每个数字,先取绝对值判断它越过了多少个分组边界,再把原始值累加到对应分组中。
三个分组边界依次为 100、1000、10000。可以使用长度为 3 的边界数组和一个分组下标:绝对值每达到一个边界,分组下标就加 1。由于边界数量固定为 3,每个数字最多比较 3 次。
需要特别注意,绝对值只用于确定分组,累加时必须使用带符号的原始数字。例如 −120 的绝对值为 120,应进入第 2 组,但对该组总和的贡献是 −120