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

华为OD机试真题——虚拟理财游戏(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

在这里插入图片描述

2025 A卷 200分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

华为OD机试真题《虚拟理财游戏》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C

GO


题目名称:虚拟理财游戏


  • 知识点:贪心算法、逻辑处理
  • 时间限制:1秒
  • 空间限制:256MB
  • 限定语言:不限

题目描述

在一款虚拟游戏中,玩家需通过投资理财产品增强资产以避免淘汰。现有一家Bank提供 m 个理财产品,每个产品有不同投资回报率、风险值和最大投资额度。玩家拥有 N 元资金,可接受的总风险值为 X。要求选择最优投资组合(最多选2个产品),在总风险不超过 X 且总投资不超过 N 的条件下,最大化投资回报(投资额×回报率)。

备注

  1. 总风险值为所选产品风险值之和;
  2. 最多投资2个产品;
  3. 投资额必须为整数;
  4. 回报=投资额×回报率。

输入描述

  • 第一行:产品数 m(1≤m≤20)、总投资额 N(1≤N≤10000)、可接受总风险 X(1≤X≤200);
  • 第二行:产品回报率序列(整数,1≤值≤60);
  • 第三行:产品风险值序列(整数,1≤值≤100);
  • 第四行:产品最大投资额度序列(整数,1≤值≤10000)。

输出描述
每个产品的投资额序列(未投资则为0)。

示例
输入:

5 100 10  
10 20 30 40 50  
3 4 5 6 10  
20 30 20 40 30  

输出:

0 30 0 40 0  

说明:投资第2、4个产品,风险4+6=10,回报30×20+40×40=2200。


Java

问题分析

题目要求选择最多两个理财产品,在总风险不超过X且总投资不超过N的条件下,最大化投资回报。需处理以下关键点:

  1. 风险控制:所选产品的风险值之和 ≤ X。
  2. 资金限制:投资额 ≤ 产品最大额度,且总和 ≤ N。
  3. 回报最大化:通过合理分配资金,使总回报最大。

解题思路

  1. 单产品选择:遍历每个产品,计算其合法投资的最大回报。
  2. 双产品组合:遍历所有产品对,确定优先级(回报率高的先投资),计算最大回报。
  3. 动态更新:维护当前最大回报及对应的投资方案。

代码实现

import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 读取输入数据int m = scanner.nextInt();int N = scanner.nextInt();int X = scanner.nextInt();int[] returnRate = new int[m];for (int i = 0; i < m; i++) {returnRate[i] = scanner.nextInt();}int[] risk = new int[m];for (int i = 0; i < m; i++) {risk[i] = scanner.nextInt();}int[] maxInvest = new int[m];for (int i = 0; i < m; i++) {maxInvest[i] = scanner.nextInt();}int maxReturn = 0;int[] result = new int[m];// 处理单个产品的情况for (int i = 0; i < m; i++) {if (risk[i] > X) continue; // 风险超标跳过int invest = Math.min(maxInvest[i], N);int currentReturn = returnRate[i] * invest;if (currentReturn > maxReturn) {maxReturn = currentReturn;Arrays.fill(result, 0);result[i] = invest;}}// 处理两个产品的组合for (int i = 0; i < m; i++) {for (int j = i + 1; j < m; j++) {int totalRisk = risk[i] + risk[j];if (totalRisk > X) continue; // 总风险超标跳过// 确定投资顺序:优先投回报率高的int first, second;if (returnRate[i] >= returnRate[j]) {first = i;second = j;} else {first = j;second = i;}// 计算最大投资额int investFirst = Math.min(maxInvest[first], N);int remaining = Math.max(N - investFirst, 0);int investSecond = Math.min(maxInvest[second], remaining);// 计算总回报int total = returnRate[first] * investFirst + returnRate[second] * investSecond;// 更新最优解if (total > maxReturn) {maxReturn = total;Arrays.fill(result, 0);result[first] = investFirst;result[second] = investSecond;}}}// 输出结果for (int i = 0; i < m; i++) {System.out.print(result[i] + (i == m - 1 ? "\n" : " "));}}
}

代码解析

  1. 输入处理:读取产品数 m、总资金 N、风险阈值 X 及三个数组。
  2. 单产品遍历
    • 检查风险是否超标。
    • 计算最大投资额,更新最优解。
  3. 双产品遍历
    • 检查总风险是否超标。
    • 根据回报率确定投资顺序。
    • 计算两个产品的最大投资额及总回报。
    • 动态更新最优解。
  4. 结果输出:按格式输出每个产品的投资额。

示例测试

  1. 示例输入

    5 100 10  
    10 20 30 40 50  
    3 4 5 6 10  
    20 30 20 40 30  
    

    输出

    0 30 0 40 0  
    

    解释:选择产品2和4,总风险4+6=10,回报30×20 +40×40=2200。

  2. 测试用例1

    2 100 5  
    30 40  
    3 4  
    50 60  
    

    输出

    0 60  
    

    解释:仅选产品2(风险4 ≤5),投资60元。

  3. 测试用例2

    3 50 8  
    15 25 20  
    2 3 4  
    20 20 20  
    

    输出

    0 20 20  
    

    解释:选产品2和3,总风险3+4=7 ≤8,回报25×20 +20×20=900。


综合分析

  1. 时间复杂度

    • 单产品遍历:O(m)。
    • 双产品遍历:O(m²)。
    • 综合复杂度:O(m²),在m≤20时完全可行。
  2. 空间复杂度

    • 存储输入数组及结果数组:O(m)。
  3. 正确性

    • 严格处理风险、资金及回报率逻辑,确保最优解正确。
  4. 优势

    • 贪心策略:优先投资高回报产品,确保局部最优。
    • 全面覆盖:处理所有合法组合,不漏解。
  5. 适用性

    • 完全符合题目约束,适用于大范围输入数据。

python

问题分析

题目要求在给定资金和风险限制下,选择最多两个理财产品,使得总回报最大化。需满足总风险不超过X,总投资不超过N,且每个产品的投资额不超过其最大额度。


解题思路</

http://www.xdnf.cn/news/9008.html

相关文章:

  • 华为OD机试真题——数据分类(2025B卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
  • 162. 寻找峰值
  • 【芯片设计中的跨时钟域信号处理:攻克亚稳态的终极指南】
  • Rust 1.0 发布十周年,梦想再度扬帆起航!
  • Class ‘AlibabaCloud\Tea\Utils\Utils\RuntimeOptions‘ not found
  • 人脸识别备案快速高效服务
  • 有效的字母异位符--LeetCode
  • 2025年5月架构真题回忆
  • SQL连接字符串的差异造成远程服务器不能正常连接
  • 数据库入门教程:以商品订单系统为例
  • 篇章四 数据结构——顺序表
  • 代码随想录算法训练营第60期第四十八天打卡
  • 010501上传下载_反弹shell-渗透命令-基础入门-网络安全
  • 《棒球百科》国家一级运动员和二级运动员的区别·棒球1号位
  • 【bug排查记录】由Redission配置引发的Satoken血案
  • Nginx 核心功能深度解析:负载均衡、缓存加速与安全防护
  • Structure-Revealing Low-Light Image Enhancement Via Robust Retinex Model论文阅读
  • 如何最简单、通俗地理解Pytorch?神经网络中的“梯度”是怎么自动求出来的?PyTorch的动态计算图是如何实现即时执行的?
  • 重构开发范式!飞算JavaAI革新Spring Cloud分布式系统开发
  • 图像分割技术的实现与比较分析
  • Windows计算机管理:定时调用指定的可执行程序(.exe)
  • DHCPig:使用 scapy 网络库的 DHCP 耗尽脚本!全参数详细教程!Kali Linux教程!
  • 数据治理进阶:数据治理基础概念解释【附全文阅读】
  • sqli-labs第二十六关——Trick with commentspace
  • Python-numpy中常用的统计函数及转换函数
  • 通俗理解线性与非线性、时变与时不变系统,和数值不稳定性机制
  • 内存管理 : 03多级页表和快表
  • MCP 协议结合大模型使用浅讲
  • 【解读—论文】引导性掩码表示学习以捕捉心电图的时空关系
  • 2025/5/25 学习日记 linux进阶命令学习