2026/4/8 10:09:10
网站建设
项目流程
阿里外贸平台网站建设,梧州网站建设服务商,最近新闻摘抄,河南企业的网络推广(新卷,100分)- 金字塔#xff0c;BOSS的收入#xff08;Java JS Python#xff09;题目描述微商模式比较典型#xff0c;下级每赚 100 元就要上交 15 元#xff0c;给出每个级别的收入#xff0c;求出金字塔尖上的人收入。输入描述第一行输入N#xff0c;表…(新卷,100分)- 金字塔BOSS的收入Java JS Python题目描述微商模式比较典型下级每赚 100 元就要上交 15 元给出每个级别的收入求出金字塔尖上的人收入。输入描述第一行输入N表示有N个代理商上下级关系接下来输入N行每行三个数代理商代号 上级代理商代号 代理商赚的钱输出描述输出一行两个以空格分隔的整数含义如下金字塔顶代理商 最终的钱数用例输入31 0 2232 0 3233 2 1203输出0 105说明2的最终收入等于323 1203/100*15323 1800的最终收入等于323 180 223/ 100 * 15 105输入41 0 1002 0 2003 0 3004 0 200输出0 120说明无题目解析本题的代理商结构其实就是一个树形结构树根就是顶级代理商。因此本题要求顶级代理商的钱其实就是一个深搜过程即每个父级代理商的钱 要从其所有子级商汲取每100元抽15元。本题的难点在于不知道树根是哪个即不知道顶级代理商号是多少。我的解题思路如下定义一个income字典其key是代理商号val是该代理商赚的钱定义一个agents集合来记录所有出现过的代理商号定义一个ch_fa字典其key是子级代理商val是父级代理商定义一个fa_ch字典其key是父级代理商val是一个集合记录key的所有子级代理商而顶级代理商必然没有父级因此我们只要遍历agents用被遍历到的每一个agent去ch_fa中找如果找不到则说明对应的agent就是顶级代理商号root。找到顶级代理商号root后提供fa_ch找到root代理商的所有子代理商chs然后遍历chs得到每一个ch的赚的钱从每个ch赚的钱中100抽15汲取到root代理商赚的钱中。当然每个ch赚的钱也有来自于ch的子级代理商们同样按照每100抽15的规则汲取。这是一个递归过程。JS算法源码/* JavaScript Node ACM模式 控制台输入获取 */ const readline require(readline); const rl readline.createInterface({ input: process.stdin, output: process.stdout, }); const lines []; let n, income, agents, ch_fa, fa_ch; rl.on(line, (line) { lines.push(line); if (lines.length 1) { n parseInt(lines[0]); // income: 记录每个代理商赚的钱, key是代理商号, val是代理商赚的钱 income {}; // agents: 记录所有的代理商号 agents []; // ch_fa: key是子级代理商号, val是父级代理商号 ch_fa {}; // fa_ch: key是父级代理上号, val是key的所有子级代理商号 fa_ch {}; } if (n lines.length n 1) { lines.shift(); for (let s of lines) { // 子级代理商号,父级代理商号,子级代理商号赚的钱 const [ch_id, fa_id, ch_income] s.split( ); income[ch_id] parseInt(ch_income); agents.push(ch_id); agents.push(fa_id); ch_fa[ch_id] fa_id; if (!fa_ch[fa_id]) fa_ch[fa_id] []; if (!fa_ch[ch_id]) fa_ch[ch_id] []; fa_ch[fa_id].push(ch_id); } console.log(getResult()); lines.length 0; } }); function getResult() { for (let agent of agents) { // 顶级代理商号根没有父级 if (!ch_fa[agent]) { // 设置顶级代理商号 初始金额 为0 income[agent] 0; // 开始深搜 dfs(agent); return ${agent} ${income[agent]}; } } } function dfs(fa_id) { // 父级代理商号的所有子级代理商号chs const chs fa_ch[fa_id]; // 如果存在子级代理商, 则父级代理商从每一个子级代理商赚的钱中每100元抽15元 if (chs.length 0) { for (let ch_id of chs) { dfs(ch_id); income[fa_id] Math.floor(income[ch_id] / 100) * 15; } } }Java算法源码import java.util.ArrayList; import java.util.HashMap; import java.util.Scanner; public class Main { // income: 记录每个代理商赚的钱, key是代理商号, val是代理商赚的钱 static HashMapString, Long income new HashMap(); // agents: 记录所有的代理商号 static ArrayListString agents new ArrayList(); // ch_fa: key是子级代理商号, val是父级代理商号 static HashMapString, String ch_fa new HashMap(); // fa_ch: key是父级代理上号, val是key的所有子级代理商号 static HashMapString, ArrayListString fa_ch new HashMap(); public static void main(String[] args) { Scanner sc new Scanner(System.in); int n sc.nextInt(); for (int i 0; i n; i) { // 子级代理商号 String ch_id sc.next(); // 父级代理商号 String fa_id sc.next(); // 子级代理商号赚的钱 long ch_income sc.nextLong(); income.put(ch_id, ch_income); agents.add(ch_id); agents.add(fa_id); ch_fa.put(ch_id, fa_id); fa_ch.putIfAbsent(fa_id, new ArrayList()); fa_ch.putIfAbsent(ch_id, new ArrayList()); fa_ch.get(fa_id).add(ch_id); } System.out.println(getResult()); } public static String getResult() { for (String agent : agents) { // 顶级代理商号根没有父级 if (!ch_fa.containsKey(agent)) { // 设置顶级代理商号 初始金额 为0 income.put(agent, 0L); // 开始深搜 dfs(agent); return agent income.get(agent); } } return ; } public static void dfs(String fa_id) { // 父级代理商号的所有子级代理商号chs ArrayListString chs fa_ch.get(fa_id); // 如果存在子级代理商, 则父级代理商从每一个子级代理商赚的钱中每100元抽15元 if (chs.size() 0) { for (String ch_id : chs) { dfs(ch_id); income.put(fa_id, income.get(fa_id) income.get(ch_id) / 100 * 15); } } } }Python算法源码# 输入获取 n int(input()) # income: 记录每个代理商赚的钱, key是代理商号, val是代理商赚的钱 income {} # agents: 记录所有的代理商号 agents [] # ch_fa: key是子级代理商号, val是父级代理商号 ch_fa {} # fa_ch: key是父级代理上号, val是key的所有子级代理商号 fa_ch {} for _ in range(n): # 子级代理商号,父级代理商号,子级代理商号赚的钱 ch_id, fa_id, ch_income input().split() income[ch_id] int(ch_income) agents.append(ch_id) agents.append(fa_id) ch_fa[ch_id] fa_id fa_ch.setdefault(fa_id, []) fa_ch.setdefault(ch_id, []) fa_ch[fa_id].append(ch_id) def dfs(fa): # 父级代理商号的所有子级代理商号chs chs fa_ch[fa] # 如果存在子级代理商, 则父级代理商从每一个子级代理商赚的钱中每100元抽15元 if len(chs) 0: for ch in chs: dfs(ch) income[fa] income[ch] // 100 * 15 # 算法入口 def getResult(): for agent in agents: # 顶级代理商号根没有父级 if ch_fa.get(agent) is None: # 设置顶级代理商号 初始金额 为0 income[agent] 0 # 开始深搜 dfs(agent) return f{agent} {income[agent]} # 算法调用 print(getResult())