当前位置: 首页 > article >正文

华为OD机试真题----BOSS的收入

题目描述
给定一个销售团队(或代理商层级)中的成员数量N。
对于每个成员,给出其ID、直接上级的ID以及该成员的销售额(或赚的钱)。
Boss的直接上级ID为0。
需要计算并输出Boss的总收入。
输入描述
第一行输入一个整数N,表示销售团队中的成员数量。
接下来的N行,每行包含三个整数:销售员的ID、该销售员的直接上级的ID、该销售员的销售额(或赚的钱)。
输出描述
输出一行,包含两个整数,用空格分隔。第一个是Boss的ID(应为0),第二个是Boss的总收入。
示例
输入:
3
1 0 223
2 0 323
3 2 1203
第一个销售员(ID为1)销售额为223元,直接上级为Boss(ID为0),因此Boss从销售员1处获得223元的15%,即33.45元(但通常题目会要求取整或按特定规则处理小数)。
第二个销售员(ID为2)销售额为323元,直接上级同样为Boss,Boss从销售员2处获得48.45元。
第三个销售员(ID为3)销售额为1203元,但其直接上级是销售员2(ID为2),销售员2从销售员3处获得180.45元,然后Boss再从销售员2处获得这部分的15%,即27.07元(同样按特定规则处理小数)。
因此,Boss的总收入为这三部分之和。
输出(假设按整数处理小数):
0 109
注意:这里的109元是示例中的简化计算结果,实际计算时可能需要考虑小数处理方式。

解答思路:

构建层级关系:首先,根据输入的每个成员的直接上级ID,构建一个层级关系图或映射表,以便快速找到每个成员的上级。
计算收入:从底层开始,逐层向上计算每个成员需要支付给其上级的金额,并累加到对应上级的收入中。对于直接上级为Boss的成员,其支付的金额直接计入Boss的收入。
输出结果:最后,输出Boss的ID(始终为0)和计算得到的总收入。

注意事项:在处理小数时,需要根据题目要求确定是否取整、四舍五入或保留特定小数位数。
确保在构建层级关系时考虑到可能的循环引用或错误的上级ID(如非0且不存在的ID),虽然在这个特定问题中不太可能出现。
如果销售团队规模较大,需要考虑算法的时间复杂度和空间复杂度,以避免性能问题。在这个问题中,由于通常销售团队规模有限,简单的遍历和累加即可满足需求。

public class BossIncomeCalculator {
    private static Map<Integer, Integer> subordinateMap = new HashMap<>();
    private static Map<Integer, Integer> salesMap = new HashMap<>();
    private static int bossIncome = 0; // 单独为Boss维护一个收入变量

    public static void calculateBossIncome() {
        // 初始化输入数据(这里为了简化,仍然使用硬编码)  
        initializeInputData();
        // 处理输入数据  
        processInputData();
        // 输出结果  
        outputResult();
    }

    private static void initializeInputData() {
        // 假设的输入数据  
        String[] lines = {
                "1 0 223",
                "2 0 323",
                "3 2 1203"
        };

        // 读取输入数据并存储到 subordinateMap 和 salesMap 中  
        for (String line : lines) {
            String[] parts = line.split(" ");
            int id = Integer.parseInt(parts[0]);
            int superiorId = Integer.parseInt(parts[1]);
            int sales = Integer.parseInt(parts[2]);

            subordinateMap.put(id, superiorId);
            salesMap.put(id, sales);
        }
    }

    private static void processInputData() {
        for (Map.Entry<Integer, Integer> entry : salesMap.entrySet()) {
            int id = entry.getKey();
            int sales = entry.getValue();
            int superiorId = subordinateMap.getOrDefault(id, 0);
            calculatePayment(id, sales);
        }
    }

    private static void calculatePayment(int id, int sales) {
        int superiorId = subordinateMap.getOrDefault(id, 0);
        if (superiorId != 0) {
            int paymentToSuperior = (int) Math.round(sales * 0.15); // 计算应支付给上级的金额
            calculatePayment(superiorId, paymentToSuperior); // 递归向上级支付提成
        } else {
            int paymentToBoss = (int) Math.round(sales * 0.15); // 计算应支付给 Boss 的金额并四舍五入
            bossIncome += paymentToBoss; // 如果上级是 Boss,则增加 Boss 的收入
        }
    }

    private static void outputResult() {
        System.out.println("0 " + bossIncome);
    }

    public static void main(String[] args) {
        calculateBossIncome();
    }
}

http://www.kler.cn/news/323568.html

相关文章:

  • 通过深度学习识别情绪
  • vue3 通过 axios + jsonp 实现根据公网 ip, 查询天气信息
  • Spring Gateway学习
  • 影响上证50股指期货价格的因素有哪些?
  • robomimic基础教程(四)——开源数据集
  • Hive优化高频面试题
  • C++远端开发环境手动编译安装(centos7)
  • SpringMVC源码-SpringMVC框架中Spring父容器和SpringMVC子容器加载的流程以及SpringMVC九大内置组件的初始
  • Unity 资源 之 PoseAI 基于肌肉的姿势创作工具
  • 【C++】内存管理:内存分布、new/delete
  • 基于CentOS7上安装MicroK8s(最小生产的 Kubernetes)
  • unix中的vfork函数
  • 2025秋招内推--招联金融
  • Webpack教程-初次体验
  • 重塑未来:组织文化建设助你应对时代挑战
  • 事后被动处置向事前主动预警转变的智慧工业开源了
  • 嵌入式Linux系统TF卡热插拔检测问题
  • 递归,搜索与回溯40道算法题
  • Android 保存本地图片
  • 深度学习(入门)03:监督学习
  • 9.24 C++ 常成员,运算符重载
  • 人工智能-机器学习-深度学习-分类与算法梳理
  • qt 模仿简易的软狗实现
  • Java NIO 全面详解:掌握 `Path` 和 `Files` 的一切
  • Keysight 下载信源 Visa 指令
  • 蓝桥杯模块二:数码管的静态、动态实现
  • 电脑录屏怎么录视频和声音?苹果macOS、windows10都可以用的原神录屏工具来啦
  • 【JAVA】算法笔记
  • Linux用户管理
  • 面试遇到的质量体系10个问题(深度思考)