华为OD机试 - BOSS的收入 - 回溯(Java 2023 B卷 100分)

news2024/11/17 17:42:34

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

一个XX产品行销总公司,只有一个boss,其有若干一级分销,一级分销又有若干二级分销,每个分销只有唯一的上级分销.
规定,每个月,下级分销需要将自己的总收入 (自己的+下级上交的) 每满100元上交15元给自己的上级。

现给出一组分销的关系,和每个分销的收入,请找出boss并计算出这个boss的收入。

比如:

  1. 收入100元上交15元;
  2. 收入199元(99元不够100)上交15元;
  3. 收入200元,上交30元。

二、输入描述

分销关系和收入: [[分销id 上级分销的ld 收入,[分销id 上级分销的id 收入],[分销id 级分销的id 收入]]

提示:

输入的数据只存在1个boss,不存在环路

三、输出描述

[boss的ID,总收入]

四、解题思路

  1. 第一行输入“分销关系和收入”的组数num;
  2. 第二行起,开始输入num行“分销id 上级分销的id 收入”;
  3. 定义经销商收入关联集合mapList,key:顶级父节点,value:[{子节点1:收入},{子节点2:收入}];
  4. 初始化经销商收入关联集合mapList;
  5. 获取BOSS节点,根据题意,没做过子节点的父节点就是boss;
  6. 获取boss的收入;
    • 如果不是boss经销商;
      • 计算上一级经销商的钱;
      • 获取上一级经销商的下级经销商的钱;
        • 获取下级经销商的钱;
      • 如果子经销商还有子经销商,则要将其的利润加到上一级经销商
      • 满100提15;
    • 如果是最终boss经销商,直接计算总money;
  7. 输出[boss的ID,总收入];

五、Java算法源码

package com.guor.od;

import java.util.*;

public class OdTest02 {
    /**
     * 经销商收入关联集合
     *
     * key:顶级父节点
     * value:[{子节点1:收入},{子节点2:收入}]
     */
    static Map<Integer, List<Map<Integer, Integer>>> mapList = new HashMap<Integer, List<Map<Integer, Integer>>>();
    static int bossId;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = Integer.parseInt(sc.nextLine());

        List<Integer> sonList = new ArrayList<>();
        List<Integer> fatherList = new ArrayList<>();

        for (int i = 0; i < num; i++) {
            // id 上级id 收入
            String[] str = sc.nextLine().split(" ");
            int sonId = Integer.parseInt(str[0]);
            int fatherId = Integer.parseInt(str[1]);
            int income = Integer.parseInt(str[2]);

            sonList.add(sonId);
            fatherList.add(fatherId);

            Map<Integer, Integer> map = new HashMap<>();
            map.put(sonId, income);
            if (mapList.containsKey(fatherId)) {
                mapList.get(fatherId).add(map);
            } else {
                List<Map<Integer, Integer>> maps = new ArrayList<>();
                maps.add(map);
                mapList.put(fatherId, maps);
            }
        }
        // 根据题意,没做过子节点的父节点就是boss
        bossId = findBossId(sonList, fatherList);
        // 经销商收入关联集合
        System.out.println(mapList);
        // 获取boss的收入
        getBossMoney(bossId, bossId);
        // 输出[boss的ID,总收入]
        System.out.println(bossId+" "+bossSum);
    }

    /**
     * 根据题意,没做过子节点的父节点就是boss
     * @param sonList 子节点集合
     * @param fatherList 父节点集合
     * @return 顶级父节点boss
     */
    public static Integer findBossId(List<Integer> sonList, List<Integer> fatherList) {
        for (Integer pId : fatherList) {
            if(!sonList.contains(pId)){
                return pId;
            }
        }
        return null;
    }

    // 找出某个子节点的子经销商的提成
    static Integer bossSum = 0;

    /**
     * 递归获取boss的收入
     * @param id 当前经销商
     * @param fatherId 上一级经销商
     * @return
     */
    public static Integer getBossMoney(int id, int fatherId) {
        // 如果不是boss经销商
        if (id != bossId) {
            int money = 0;
            // 计算上一级经销商的钱
            if (mapList.containsKey(fatherId)) {
                // 获取上一级经销商的下级经销商的钱
                for (Map<Integer, Integer> map : mapList.get(fatherId)) {
                    // 获取下级经销商的钱
                    if(map.containsKey(id)){
                        money = map.get(id);
                        break;
                    }
                }
            }
            // 如果子经销商还有子经销商,则要将其的利润加到上一级经销商
            if (mapList.containsKey(id)) {
                for (Map<Integer, Integer> map : mapList.get(id)) {
                    money += getBossMoney(map.keySet().iterator().next(), id);
                }
            }
            // 满100提15
            return (money / 100) * 15;
        } else {
            // 如果是最终boss经销商,直接计算总money
            for (Map<Integer, Integer> map : mapList.get(bossId)) {
                int next = map.keySet().iterator().next();
                bossSum += getBossMoney(next, bossId);
            }
        }
        return 0;
    }
}

六、效果展示

1、输入

6
1 0 299
2 0 299
3 1 389
4 2 479
5 2 199
6 4 799

2、输出

0 90

3、说明

0是顶级boss经销商
6上交15 * 7 = 105 到4
5上交15 * 1 到2
4上交15 * 4 到2
3上交15 * 3 到1

2变成299+15+60=374

1变成299+45=344

2上交153到0
1上交15
3到0

0作为boss,最终获得90。

这BOSS真的是不赚钱啊,良心企业家,哈哈。

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/889987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

定向传音?静音广播?这所学校会“法术”!

“老者念念有词&#xff0c;一个与世隔绝的空间便形成了&#xff0c;明明身处闹市&#xff0c;周围的人却听不见空间里声音。”小说里经常出现的场景&#xff0c;如今&#xff0c;现实世界正在实现&#xff01; 广州的一所学校里&#xff0c;活力四射的学生方队&#xff0c;正在…

【系统工具】开源服务器监控工具WGCLOUD初体验

经常看到服务器上传下载流量一直在跑&#xff0c;也不知道是啥软件在偷偷联网~~~官网地址&#xff1a;www.wgstart.com&#xff0c;个人使用是免费的。 WGCLOUD官网介绍 "WGCLOUD支持主机各种指标监测&#xff08;cpu使用率&#xff0c;cpu温度&#xff0c;内存使用率&am…

【Java 动态数据统计图】动态数据统计思路案例(动态,排序)二(113)

需求&#xff1a; 有一个List<Map<String.Object>>,存储了区域的数据&#xff0c; 数据是根据用户查询条件进行显示的&#xff1b;所以查询的数据是动态的&#xff1b;按区域维度统计每个区域出现的次数&#xff0c;并且按照次数的大小排序&#xff08;升序&#…

C++新经典--文件操作

文件简介 文件在程序设计中是一个比较重要的概念&#xff0c;这里所说的文件&#xff0c;是指保存在硬盘、U盘等存储介质上的数据&#xff0c;这些存储介质&#xff08;简称磁盘&#xff09;上的数据就是以一个个文件的形式体现&#xff0c;每一个文件有一个对应的名字&#x…

Kotlin开发笔记:使用委托进行拓展

Kotlin开发笔记&#xff1a;使用委托进行拓展 导言 在OO语言(面向对象)中&#xff0c;我们经常会用到委托或者代理的思想。委托和代理在乍一看很相似&#xff0c;其实其各有各的侧重点&#xff0c;这里我引用ChatGpt的回答&#xff1a; 委托&#xff08;Delegation&#xff09…

内涝防控一张图!解锁内涝防控全周期解决方案

随着暴雨高发季的到来&#xff0c;如何提升城市内涝治理水平&#xff0c;构筑人民生活美好空间成为各地关注的重点。近日&#xff0c; 住房和城乡建设部、应急管理部印发《关于加强城市排水防涝应急管理工作的通知》&#xff0c;明确提出&#xff0c;各地要加强城市内涝整治和排…

java Spring Boot properties多环境配置拆分文件管理

上文 java Spring Boot yml多环境拆分文件管理优化 我们用yml 做了一个多环境配置文件的拆分管理 我们将 application.yml 改为 application.properties 参考代码如下 spring.profiles.activedev我们知道 yml 是用 : 来区分高低基本 而 properties是直接通过 . 来表达 其他基本…

解锁暑假云端生活:铁威马NAS助你打造个性化体验

暑假转眼过半&#xff0c;大家一定度过一段非常美好的时光吧。朋友圈被去各地旅游的、看各种演唱会的、各种各样的观影读后感刷屏...生活很精彩&#xff0c;但如何高效地管理、享受和分享自己的文件、照片和影音内容成为困扰我们的难题。在这方面&#xff0c;铁威马NAS成为了越…

Unity自定义脚本的 初始模版

参考博主&#xff1a;Unity修改创建的脚本模板&#xff0c;Unity脚本模板路径_unity hub 怎么改脚本模板_先生沉默先的博客-CSDN博客 【100个 Unity实用技能】 ☀️ | Unity自定义脚本的初始模版_unity 模板脚本_呆呆敲代码的小Y的博客-CSDN博客 一&#xff0c;将脚本放到Ed…

【uniapp】使用permission获取录音权限及实现录音功能

需求 app获取录音权限权限, 实现录音并且播放功能 实现 一. 使用permission获取录音权限 原博 : https://www.wanjunshijie.com/note/uniapp/3203.html 1.1 manifest.json 配置权限 android.permission.RECORD_AUDIO 1.2 permision使用和下载 ( 自行百度搜索即可 ) 1.3 获…

【探索Linux】—— 强大的命令行工具 P.4(编译器 gcc/g++ 使用)

阅读导航 前言一、编译的四大过程&#xff08;背景知识&#xff09;1. 预处理&#xff08;Preprocessing&#xff09;2. 编译&#xff08;Compilation&#xff09;3. 汇编&#xff08;Assembly&#xff09;4. 链接&#xff08;Linking&#xff09; 二、gcc的使用1. 概念2. gcc主…

Docker 容器内无法使用vim命令 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 进入Docker容器后 无法使用vim编辑器,出现如下问题:bash: vim: command not found 如图所示: 想着通过apt-get 安装vim,出现如下问题: root@b9f0fd330d5b:/# apt-get install vim Reading package lists... Done B…

VR全景加盟项目如何开展?如何共赢VR时代红利?

VR全景作为一个新兴蓝海项目&#xff0c;相信有着很多人刚接触VR行业的时候都会有这样的疑问&#xff1a;VR全景加盟后项目如何开展&#xff1f;今天&#xff0c;我们就从项目运营的三个阶段为大家讲解。 一、了解项目时 目前VR全景已经被应用到各行各业中去&#xff0c;学校、…

通过postgresql的Ltree字段类型实现目录结构的基本操作

通过postgresql的Ltree字段类型实现目录结构的基本操作 将这种具有目录结构的excel表存储到数据库中&#xff0c;可以采用树型结构存储 DROP TABLE IF EXISTS "public"."directory_tree"; CREATE TABLE "public"."directory_tree" (…

使用 PyTorch 进行高效图像分割:第 1 部分

一、说明 在这个由 4 部分组成的系列中&#xff0c;我们将使用 PyTorch 中的深度学习技术从头开始逐步实现图像分割。我们将在本文中从图像分割所需的基本概念和想法开始本系列。 图1&#xff1a;宠物图像及其分割掩码&#xff08;来源&#xff1a;牛津-IIIT宠物数据集) 图像分…

OpenLayers入门,OpenLayers加载船讯网航海地图

专栏目录: OpenLayers入门教程汇总目录 前言 本章实现OpenLayers加载船讯网航海地图。 二、依赖和使用 "ol": "^6.15.1"使用npm安装依赖npm install ol@6.15.1使用Yarn安装依赖yarn add olvue中如何使用: vue项目使用请参考这篇文章:

Maven之JDK编译问题

IDEA Maven 默认使用 JDK 1.5 编译问题 IDEA 在「调用」maven 时&#xff0c;IDEA 默认都会采用 JDK 1.5 编译&#xff0c;不管你安装的 JDK 版本是 JDK 7 还是 JDK 8 或者更高。这样一来非常不方便&#xff0c;尤其是时不时使用 JDK 7/8 的新特性时。如果使用新特性&#xff…

[10min速通]STM32CubemMX配置W25Q128

[10min速通]&#x1f98f;STM32CubemMX配置W25Q128 文章目录 [10min速通]&#x1f98f;STM32CubemMX配置W25Q1281、下载源码2、配置Cube2.1 基础配置2.2 SPI配置 3、配置MDK3.1 添加源文件3.2 管理源文件3.3 完成接口配置 4、接口介绍4.1 初始化4.2 擦除4.3 写入4.4 读取 5、代…

AntDB数据库受邀参加【ACDU 中国行】,共促行业发展和创新

作为数据的集中存储和管理系统&#xff0c;数据库在现代信息化时代扮演着至关重要的角色&#xff0c;随着人工智能&#xff0c;物联网和大数据时代的到来&#xff0c;数据库的发展需要进一步拓展其广度和深度&#xff0c;持续创新&#xff0c;实现技术进步&#xff0c;以更好地…

香港服务器备案会通过吗?

​  对于企业或个人来说&#xff0c;合规备案是网络运营的基本要求&#xff0c;也是保护自身权益的重要举措。以下内容围绕备案展开话题&#xff0c;希望为您解开疑惑。 香港服务器备案会通过吗? 目前&#xff0c;香港服务器无法备案&#xff0c;这是由于国内管理规定的限制…