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

华为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.lryc.cn/news/2386534.html

相关文章:

  • Vue-01(Vue CLI创建项目以及文件配置说明)
  • 华为云Flexus+DeepSeek征文 | DeepSeek-V3/R1商用服务开通体验全流程及使用评测
  • redis列表类型
  • 人工智能数学基础实验(一):智能推荐系统实战
  • uni-app学习笔记十二-vue3中组件传值(对象传值)
  • Vue.js教学第十四章:Vuex模块化,打造高效大型应用状态管理
  • Ubuntu/Linux 服务器上调整系统时间(日期和时间)
  • win11 禁用/恢复 内置笔记本键盘(保证管用)
  • 精度不够?光纤激光尺0.2ppm误差解锁微米级制造
  • Android 16系统源码_自由窗口(一)触发自由窗口模式
  • sqli-labs第十八关——POST-UA注入
  • 流式优先架构:彻底改变实时数据处理
  • WebSockets 在实时通信中的应用与优化
  • 零基础教程:用 Docker + pgloader 将 MySQL 数据库迁移到 PostgreSQL
  • mac上安装 Rust 开发环境
  • 解决RedisTemplate的json反序列泛型丢失问题
  • 【Elasticsearch】创建别名的几种方式
  • 【JAVA】中文我该怎么排序?
  • 《C 语言字符串操作从入门到实战(下篇):strncpy/strncat/strstr 等函数原理与实现》
  • 百度飞桨PaddleOCR 3.0开源发布 OCR精度跃升13%
  • Xilinx 7Series\UltraScale 在线升级FLASH STARTUPE2和STARTUPE3使用
  • 数字孪生驱动的离散制造智能升级:架构设计与工程实践
  • 9.4在 VS Code 中配置 Maven
  • mmaction2——tools文件夹下
  • 新能源汽车充电桩资源如何利用资源高效配置?
  • python 程序实现了毫米波大规模MIMO系统中的信道估计对比实验
  • NTFS0x90属性和0xa0属性和0xb0属性的一一对应关系是index_entry中的index_node中VCN和runlist和bitmap
  • PDF 编辑批量拆分合并OCR 识别
  • LeetCode --- 450周赛
  • SpringBoot中消息转换器的选择