【华为机试】2023年真题B卷(python)-金字塔-微商的收入

发布时间:2024年01月03日

一、题目

题目描述:

微商模式比较典型,下级每赚 100 元就要上交 15 元,给出每个级别的收入,求出金字塔尖上的人收入。

二、输入输出

输入描述;
第一行输入N,表示有N个代理商上下级关系。
接下来输入N行,每行三个数: 代理商代号 上级代理商代号 代理商赚的钱。
输出描述:
输出一行,两个以空格分隔的整数,含义如下 金字塔顶代理商 最终的钱数。

三、示例

示例1:
输入:
3
1 0 223
2 0 323
3 2 1203
输出:
0 105?
说明:
2的最终收入等于323 + 1203/100*15=323 + 180
0的最终收入等于 (323 + 180 + 223) / 100* 15 = 105

示例2:
输入:
4
1 0 100
2 0 200
3 0 300
4 0 200
输出:
0 120?
说明

四、解题思路

先用一个二维数据存储代理、上级代理、收入数据,按照上级代理商代号进行降序排序。然后再遍历这个二维数组,根据遍历得到的上下级信息,可以得到: 上级收入 += 本级收入 /100* 15。

五、参考代码?

# -*- coding: utf-8 -*-
'''
@File    :   2023-B-微商的收入.py
@Time    :   2023/12/30 01:34:36
@Author  :   mgc 
@Version :   1.0
@Desc    :   None
'''

def pyramid_top_income():
    # 读取代理商的数量
    n = int(input().strip())
    # 创建一个字典来存储每个代理商的收入和上级代理商的信息
    data = []
    for _ in range(n):
        # 读取代理商的信息
        agent, parent, income = map(int, input().strip().split())
        data.append([agent, parent, income])
    # 对数据进行排序
    data.sort(key=lambda x: -x[1])
    # 获取最上级的代理商    
    top_agent = data[-1][1]
    # 计算金字塔尖上的人的最终收入,即他自己的收入加上他的所有下级代理商的收入的15%
    final_income = {}
    for agent, parent, income in data:
        if final_income.get(agent) is not None:
            income += final_income[agent]

        if final_income.get(parent) is None:
            final_income[parent] = 0

        final_income[parent] += income // 100 * 15
    return top_agent, final_income[top_agent]

# 测试函数
top_agent, income = pyramid_top_income()
print(f"{top_agent} {income}")
文章来源:https://blog.csdn.net/u014481728/article/details/135300880
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。