華為OD機試真題——Boss的收入(分銷網絡提成計算)(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳實現

在這里插入圖片描述

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處:https://dhexx.cn/hk/5529965.html

如若內容造成侵權/違法違規/事實不符,請聯系我的編程經驗分享網進行投訴反饋,一經查實,立即刪除!


相關文章:

  • 零基礎開始的網工之路第十六天------Linux安全管理
  • 西門子嵌入式學習筆記---(1)裸機和調度器開發
  • 【深度學習新浪潮】什么是混合精度分解?
  • 【圖像處理基石】立體匹配的經典算法有哪些?
  • 【春秋云鏡】CVE-2022-26965 靶場writeup
  • json轉成yolo用的txt(json中沒有寬高,需要自設寬高的)
  • Java八股-Java優缺點,跨平臺,jdk、jre、jvm關系,解釋和編譯
  • WPF 按鈕懸停動畫效果實現
  • 安科瑞Acrelcloud-6200系統:智慧路燈安全用電監控平臺架構解析
  • DAY 14 SHAP庫的繪制
  • 【Java】線程池的實現原理是怎樣的?CPU密集型任務與IO密集型任務的區別?
  • leetcode450.刪除二叉搜索樹中的節點:迭代法巧用中間節點應對多場景刪除
  • C# Costura.Fody 排除多個指定dll
  • AI編程報錯 API流式傳輸失敗解決方案
  • Java設計模式之中介者模式詳解
  • 50天50個小項目 (Vue3 + Tailwindcss V4) ? | Split Landing Page(拆分展示頁)
  • (LeetCode 每日一題)3373. 連接兩棵樹后最大目標節點數目 II(貪心+深度優先搜索dfs)
  • 用 Python 模擬雪花飄落效果
  • 【ConvLSTM第二期】模擬視頻幀的時序建模(Python代碼實現)
  • 「動態規劃::狀壓DP」網格圖遞推 / AcWing 292|327(C++)
  • 【QT】理解QT機制之“元對象系統”
  • 【博客系統】博客系統第十一彈:從零開始在 Linux 系統上搭建 Java 部署環境并部署 Web 項目
  • 人工智能在智能零售中的創新應用與未來趨勢
  • thinkphp 5.1 部分知識記錄<一>
  • Axure設計案例——科技感漸變線性圖
  • RuoYi前后端分離框架集成手機短信驗證碼(一)之后端篇
  • WPF 按鈕點擊音效實現
  • Qt DateTimeEdit(時間?期的微調框)
  • 本地部署大模型llm+RAG向量檢索問答系統 deepseek chatgpt
  • 汽車制造場景下Profibus轉Profinet網關核心功能與應用解析
  • ubuntu 安裝上傳的 ffmpeg_7.1.1.orig.tar.xz并使用
  • 2025年- H56-Lc164--200.島嶼數量(圖論,深搜)--Java版
  • 【Redis】第3節|深入理解Redis線程模型
  • Axios 如何通過配置實現通過接口請求下載文件
  • Unity Button 交互動畫
  • SQL的查詢優化
  • go并發編程| channel入門
  • [預訓練]Encoder-only架構的預訓練任務核心機制
  • 題目 3298: 藍橋杯2024年第十五屆決賽真題-兔子集結
  • 基于隨機函數鏈接神經網絡(RVFL)的鋰電池健康狀態(SOH)預測
  • 霹靂吧啦Wz_深度學習-圖像分類篇章_1.1 卷積神經網絡基礎_筆記
  • Vision Transformer網絡結構
  • 【Python Cookbook】迭代器與生成器(四)
  • CSS篇-1
  • 在 Ubuntu 上安裝 NVM (Node Version Manager) 的步驟
  • 基于通義千問的兒童陪伴學習和成長的智能應用架構。
  • Go語言中flag包的用法詳解
  • DFS:從入門到進階的刷題指南
  • MATLAB 橫向剪切干涉系統用戶界面設計及其波前重構研究
  • 各國競爭的下一代液晶技術:中國鐵電液晶取得重大突破突破