华为OD机试真题——Boss的收入(分销网络提成计算)(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

article/2025/8/20 11:47:44

在这里插入图片描述

2025 A卷 100分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

华为OD机试真题《Boss的收入(分销网络提成计算)》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C

GO


题目名称:Boss的收入(分销网络提成计算)


  1. 知识点:树遍历、哈希表、递归/DFS
  2. 时间限制:1秒
  3. 空间限制:256MB
  4. 语言限制:不限

题目描述

一个XX产品行销总公司采用分级分销模式,仅有一个boss(顶级分销商),下设若干一级分销商,每个一级分销商又可能发展多级下级分销商。每个分销商有唯一的上级。规则如下:

  1. 收入上交规则
    • 每月,下级需将自身收入(含下级上交部分)每满100元上交15元给直接上级。
    • 例如:收入100元上交15元;收入199元(不足200)上交15元;收入200元上交30元。
  2. 输入格式
    • 第一行为关系数量N,后续N行每行为分销ID 上级分销ID 收入,表示分销商及其直接上级的初始收入。
    • 分销ID范围:065535,收入范围:065535元。
    • 保证输入无环路,且仅有一个boss(无上级的分销商)
  3. 输出要求
    • 输出boss的ID和总提成收入(仅计算下级上交部分,不包含boss自身收入)。
示例

输入

5
1 0 100
2 0 199
3 0 200
4 0 200
5 0 200

输出

0 120

解释

  • Boss(ID=0)的提成来自:
    • ID=1:100→15元
    • ID=2:199→15元
    • ID=3/4/5:200→30元×3=90元
    • 总计:15+15+90=120元

Java

问题分析

我们需要计算分销网络中顶级分销商(boss)的总提成收入。每个分销商需要将自身收入(包括下级上交的部分)每满100元上交15元给直接上级。boss的提成来自所有直接下级上交的金额总和。

解题思路

  1. 输入处理:读取分销商关系数据,构建树结构。
  2. 树结构构建:识别boss节点(无上级的分销商),并建立父子关系。
  3. 递归计算:通过深度优先搜索(DFS)计算每个节点的上交金额,累加得到boss的总提成。

代码实现

import java.util.*;public class Main {static class Node {int id;int initialIncome;List<Node> children;public Node(int id, int initialIncome) {this.id = id;this.initialIncome = initialIncome;this.children = new ArrayList<>();}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = scanner.nextInt();// 保存分销商ID与上级ID、初始收入的映射关系Map<Integer, Integer> parentMap = new HashMap<>();Map<Integer, Integer> incomeMap = new HashMap<>();for (int i = 0; i < N; i++) {int id = scanner.nextInt();int parent = scanner.nextInt();int income = scanner.nextInt();parentMap.put(id, parent);incomeMap.put(id, income);}// 收集所有分销商IDSet<Integer> allIds = new HashSet<>(parentMap.keySet());// 找到boss的ID(其上级不在所有分销商ID中)int bossId = -1;for (int parentId : parentMap.values()) {if (!allIds.contains(parentId)) {bossId = parentId;break;}}// 创建所有节点(包括boss)Map<Integer, Node> nodeMap = new HashMap<>();Node bossNode = new Node(bossId, 0); // boss初始收入为0nodeMap.put(bossId, bossNode);// 创建其他分销商节点for (int id : parentMap.keySet()) {nodeMap.put(id, new Node(id, incomeMap.get(id)));}// 建立父子关系for (int id : parentMap.keySet()) {int parentId = parentMap.get(id);Node parent = nodeMap.get(parentId);Node child = nodeMap.get(id);parent.children.add(child);}// 计算boss的总提成int totalCommission = 0;for (Node child : bossNode.children) {totalCommission += dfs(child);}System.out.println(bossId + " " + totalCommission);}// DFS递归计算每个节点的上交金额private static int dfs(Node node) {int totalContribution = node.initialIncome; // 初始收入for (Node child : node.children) {totalContribution += dfs(child); // 累加所有下级的上交金额}int up = (totalContribution / 100) * 15; // 计算上交金额return up;}
}

代码详解

  1. 数据结构定义

    • Node类表示分销商节点,包含ID、初始收入和子节点列表。
  2. 输入处理

    • 读取输入数据,保存每个分销商的上级ID和初始收入到parentMapincomeMap
  3. 确定boss的ID

    • 遍历所有上级ID,找到不在分销商ID集合中的那个ID,即为boss的ID。
  4. 构建树结构

    • 创建所有分销商节点,包括boss节点(初始收入为0)。
    • 根据父子关系建立树结构,将每个节点添加到其父节点的子节点列表中。
  5. 递归计算上交金额

    • dfs函数递归计算每个节点的总贡献(自身收入 + 下级上交总和),并返回上交金额。
  6. 输出结果

    • 累加boss所有直接下级的上交金额,得到总提成并输出。

示例测试

示例1
输入:

5
1 0 100
2 0 199
3 0 200
4 0 200
5 0 200

输出:

0 120

解析:boss的ID为0,总提成来自各下级的上交总和(15+15+30×3=120)。

示例2
输入:

2
1 2 100
2 3 200

输出:

3 30

解析:boss的ID为3,提成来自下级2上交的30元。

示例3
输入&#x


http://www.hkcw.cn/article/kIocVLPrra.shtml

相关文章

中国批准修建最昂贵运河为何受关注 重塑交通格局引发国际热议

中国即将启动一项震惊全球的大工程——浙赣粤运河。该项目总投资3200亿元,刷新了中国运河造价纪录。这条运河北起浙江杭州,穿过江西,南至广东广州的珠江出海口,全长1237公里,其中江西境内占759公里。通过钱塘江、兰江等水系连接杭州,形成贯穿浙赣粤三省的水上通道。从交通…

广东河源24小时内连震两次 市民难眠

广东河源24小时内连震两次 市民难眠!中国地震台网正式测定,5月30日2时21分在广东河源市源城区发生3.0级地震,震源深度10公里,震中位于北纬23.72度,东经114.68度。此次地震震中5公里范围内平均海拔约52米。震中周边200公里内近5年来共发生3.0级以上地震15次,最大地震是202…

74.用户编辑功能在多次修复后仍未成功实现

在用户编辑功能在多次修复后仍未成功实现之后决定换种方法 对于后端则不需要过多修改&#xff0c;只需要修改前端即可 首先&#xff0c;在 data() 中添加新的状态&#xff1a; 用户模板部分可继续沿用之前的方法所留下来的代码 修改start、cancel、save方法 修改现有的 rege…

Void:免费且隐私友好的 AI 编码利器,挑战 Cursor 地位?

开发者圈儿里最近有点小激动&#xff0c;大家都在议论一个叫Void的开源AI代码编辑器。这家伙在GitHub上人气飙涨&#xff0c;短时间内就斩获了超过22.1k的星标&#xff0c;简直成了科技圈的新宠。它被誉为“黑马”&#xff0c;不仅因为它继承了大家都很熟悉的Visual Studio Cod…

Cadence Innvous导出GDS没有STDCELL/IO/NET/VIA问题的解决方法

Cadence Innvous导出GDS之后&#xff0c;可以重新导入Cadence Virtuoso进行查看。 1. Innovus设计完成后的GDS导出命令 导出gds命令&#xff1a; streamOut [-help] <fileName> [-attachNetProp <string>] [-dieAreaAsBoundary] [-libName <string>] [-map…

菲总统任命新国家警察总长 曾主导前总统逮捕行动

菲律宾总统马科斯选定国家警察刑事调查组组长尼古拉斯托雷出任国家警察新任总长。托雷此前主导了逮捕前总统杜特尔特的行动。菲总统执行秘书卢卡斯贝尔萨敏在马拉卡南宫记者会上宣布了这一任命。交接仪式定于6月2日举行,托雷将接替即将退休的现任总长罗梅尔马比尔。托雷成为马…

《深度搜索-R1-0528》

深度搜索-R1-0528 Paper Link &#xff08;纸质链接&#xff09;&#x1f441;️ 1. 引言 DeepSeek R1 模型进行了小版本升级&#xff0c;当前版本为 DeepSeek-R1-0528。在最新的更新中&#xff0c;DeepSeek R1 通过利用增加的计算资源并在后训练期间引入算法优化机制&#x…

男子翻女友手机才发现小丑竟是自己 女子:我们就是牌友

河南许昌,刘先生称和女友恋爱2年多,女友比自己大5岁带三个娃,相处期间两人很和睦,自己给对方还房贷,孩子都叫自己爸爸了,却意外发现她手机里还有男朋友,备注叫大哥。女方:我和刘先生就是牌友,和手机里男友的马上要结婚了,给的钱全是打牌的钱...随后,女方正牌男友来到…

Arduino 编码器

旋转编码器模块 这次我们将使用的旋转编码器为360度KY-040模块&#xff0c;工作电压: 5V&#xff0c;一圈脉冲数: 20&#xff0c;旋转编码器可通过旋转可以计数正方向和反方向转动过程中输出脉冲的次数&#xff0c;旋转计数和电位计不一样&#xff0c;这种转动计数是没有限制的…

ppt一键制作:ai自动生成PPT,便捷高效超级精美!

深夜的台灯下&#xff0c;你对着杂乱的 PPT 内容反复刷新灵感&#xff0c;鼠标在字体、配色选项间来回穿梭&#xff0c;好不容易拼凑出的页面&#xff0c;却总透着浓浓的 “廉价感”&#xff1b;汇报在即&#xff0c;逻辑混乱的大纲改了又改&#xff0c;每一页感觉合适又不搭&a…

俞敏洪骑车摔倒深夜发博:感谢关心,皮外伤

5月29日,俞敏洪在青海骑行时不慎摔倒,膝盖等处磕破出血。30日凌晨1点多,他发博报平安:29日骑车有点睡着了摔了一下,感谢广大朋友关心,皮外伤,不用担心。责任编辑:zx0002

R语言在生物群落数据统计分析与绘图中的实践应用

随着生物信息学的快速发展&#xff0c;R语言因其开源、自由、免费的特点&#xff0c;在生物群落数据分析领域得到了广泛应用。生物群落数据多样且复杂&#xff0c;涉及众多统计分析方法。本文旨在介绍R语言在生物群落数据统计分析与绘图中的实践应用&#xff0c;结合具体技术要…

100个 Coze 智能体实战案例

&#x1f44b; 家人们&#xff0c;今天我们正式开始 「100个 Coze 智能体实战案例」 系列&#xff01; 为了让关注的小伙伴&#xff0c;去学习到字节的大杀器&#xff0c;coze空间里面的工作流&#xff0c;做agent智能体也好&#xff0c;工作流也好&#xff0c;很多人都会疑惑…

跨越太赫兹鸿沟:高通量实时成像的曙光?

告别蜗牛扫描&#xff0c;实时透视不再是梦 你是否想象过&#xff0c;未来的安检仪能瞬间透视行李箱内的物品&#xff0c;医生能无创“看穿”皮肤下的癌细胞&#xff0c;文物修复师能精准分析千年古画下的每一层颜料&#xff1f;这些科幻场景的实现&#xff0c;正依赖于一种名…

高效开发,升级软件,硬件也要专业

作为开发者的你&#xff0c;在看代码时是否有频繁切换鼠标滚轮的困扰?是否经常会感觉到看代码眼睛干涩? 是时候拥有一台专为程序员打造的专用显示器啦&#xff0c;作为一名程序员&#xff0c;需要写很多项目&#xff0c;都是大工程&#xff0c;我们在修改代码时总希望能显示多…

上班带饭素材

=================================================================== 素菜: 清炒西蓝花 + 欧芹大蒜盐 清炒生菜 &#

从时钟精度看晶振频率稳定度的重要性

在当今数字化的时代&#xff0c;电子设备无处不在&#xff0c;从我们日常使用的智能手机、电脑&#xff0c;到工业生产中的自动化控制系统&#xff0c;再到航空航天领域的精密仪器&#xff0c;这些设备的正常运行都离不开一个关键的组件——晶振。晶振&#xff0c;全称为晶体振…

RAG技术:私有大模型知识更新的最佳实践

“ 大模型的知识主要是在预训练阶段学习的&#xff0c;更新大模型的固化知识是非常困难的&#xff0c;需要通过特定数据集的微调再训练实现。通过RAG实现私有知识库与私有化部署大模型相融合&#xff0c;就变得容易得多&#xff0c;但需要根据私有知识库的数据结构特点进行选型…

Cesium 报错:自定义材质报‘texture2D‘ : no matching overloaded function found错误

文章目录 问题分析解决 问题 Ceisum 加载自定义材质时报错如下&#xff1a; 自定义材质报‘texture2D‘ : no matching overloaded function found错误 分析 cesium1.102 及以上的版本会报错&#xff1a;原因是从1.102版本开始默认使用的是WebGL2上下文渲染。WebGL2 在所有平…

vue3项目 前端文件下载的两种工具函数

1、Blob 流下载 Blob 表示不可变的原始数据的类文件对象&#xff0c;通常用于处理文件或大块二进制数据。 注意&#xff1a;js中还有一个二进制数据类型ArrayBuffer&#xff0c;它们的区别如下 Blob 可以位于磁盘、高速缓存内存和其他不可用的位置&#xff1b;ArrayBuffer 是存…