虚拟游戏理财 - 华为OD统一考试(C卷)

OD统一考试(C卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

在一款虚拟游戏中生活,你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。

现有一家Bank,它提供有若干理财产品m,风险及投资回报不同,你有N (元)进行投资,能接受的总风,险值为X。

你要在可接受范围内选择最优的投资方式获得最大回报。

说明:

  • 在虚拟游戏中,每项投资风,险值相加为总风,险值;

  • 在虚拟游戏中,最多只能投资2个理财产品;

  • 在虚拟游戏中,最小单位为整数,不能拆分为小数;

  • 投资额*回报率=投资回报

输入描述

第一行:产品数(取值范围[1, 20]),总投资额(整数,取值范围[1,10000]),可接受的总风险(整数,取值范围[1,200])

第二行:产品投资回报率序列,输入为整数,取值范围[1,60]

第三行:产品风险值序列,输入为整数,取值范围[1,100]

第四行:最大投资额度序列,输入为整数,取值范围[1,10000]

输出描述

每个产品的投资序列

示例1

输入:
5 100 10
10 20 30 40 50
3 4 5 6 10
20 30 20 40 30输出:
0 30 0 40 0说明:
投资第二项 30 个单位,第四项 40 个单位,总的投资风险为两项相加为 4+6=10。

题解

这道题是一个简单的贪心算法问题。下面是解题思路和代码的分析:

  • 题目类型:贪心算法问题。
  • 解题思路:通过贪心算法选择最优的投资方式,即在可接受范围内选择回报率高且风险低的投资方案。
  • 代码描述:
    1. 读取输入数据:产品数、总投资额、可接受的总风险,产品投资回报率序列,产品风险值序列,最大投资额度序列。
    2. 初始化最大收益为0,创建一个空的字典rs用于存储最优投资数量。
    3. 遍历产品,对于每个产品:
      • 如果该产品的风险超过了可接受的总风险,则跳过该产品。
      • 计算只投资该产品时的投资数量,更新最大收益和最优投资数量。
      • 遍历剩余产品,计算两种产品组合的投资数量,更新最大收益和最优投资数量。
    4. 输出最优投资数量序列。
  • 时间复杂度:假设产品数为m,则时间复杂度为O(m^2)。
  • 空间复杂度:空间复杂度取决于存储最优投资数量的字典rs,最坏情况下为O(m)。

Java

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/*** @author code5bug*/
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 产品数,总投资额,可接受的总风险int m = in.nextInt(), n = in.nextInt(), x = in.nextInt();in.nextLine(); // 忽略换行符// 产品投资回报率序列int[] reward = Arrays.stream(in.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();// 产品风险值序列int[] risk = Arrays.stream(in.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();// 最大投资额度序列int[] restrict = Arrays.stream(in.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();int maxReward = 0; // 最大收益Map<Integer, Integer> rs = new HashMap<>();for (int i = 0; i < m; i++) {if (risk[i] > x) continue;// 只购买 i 产品int k = Math.min(restrict[i], n);if (reward[i] * k > maxReward) {rs.clear();rs.put(i, k);maxReward = reward[i] * k;}for (int j = i + 1; j < m; j++) {if (risk[i] + risk[j] > x) continue;int cnti = restrict[i], cntj = restrict[j];if (reward[i] > reward[j]) {cnti = Math.min(cnti, n);cntj = Math.min(cntj, n - cnti);} else {cntj = Math.min(cntj, n);cnti = Math.min(cnti, n - cntj);}if (reward[i] * cnti + reward[j] * cntj > maxReward) {rs.clear();rs.put(i, cnti);rs.put(j, cntj);maxReward = reward[i] * cnti + reward[j] * cntj;}}}StringBuilder builder = new StringBuilder();for (int i = 0; i < m; i++) {builder.append(rs.getOrDefault(i, 0)).append(" ");}System.out.println(builder.toString());}}

Python

# 导入必要的模块
from collections import defaultdict# 获取输入数据
m, n, x = map(int, input().split())
reward = list(map(int, input().split()))
risk = list(map(int, input().split()))
restrict = list(map(int, input().split()))max_reward = 0  # 最大收益
rs = defaultdict(int)  # 存储最优方案for i in range(m):if risk[i] > x:continue# 只购买第 i 个产品k = min(restrict[i], n)if reward[i] * k > max_reward:rs.clear()rs[i] = kmax_reward = reward[i] * kfor j in range(i + 1, m):if risk[i] + risk[j] > x:continuecnti, cntj = restrict[i], restrict[j]if reward[i] > reward[j]:cnti = min(cnti, n)cntj = min(cntj, n - cnti)else:cntj = min(cntj, n)cnti = min(cnti, n - cntj)if reward[i] * cnti + reward[j] * cntj > max_reward:rs.clear()rs[i] = cntirs[j] = cntjmax_reward = reward[i] * cnti + reward[j] * cntj# 输出最优方案
result = ' '.join(str(rs[i]) if i in rs else '0' for i in range(m))
print(result)

C++

#include <algorithm>
#include <iostream>
#include <unordered_map>
#include <vector>using namespace std;int main()
{int m, n, x;cin >> m >> n >> x;// 用于存储投资回报率、风险和产品投资限制的数组vector<int> reward(m);vector<int> risk(m);vector<int> restrict(m);// 读取投资回报率for (int i = 0; i < m; i++) {cin >> reward[i];}// 读取风险值for (int i = 0; i < m; i++) {cin >> risk[i];}// 读取投资限制for (int i = 0; i < m; i++) {cin >> restrict[i];}int                     maxReward = 0;   // 最大收益unordered_map<int, int> rs;              // 存储最优投资数量的映射for (int i = 0; i < m; i++) {if (risk[i] > x) continue;// 只投资于产品 iint k = min(restrict[i], n);if (reward[i] * k > maxReward) {rs.clear();rs[i]     = k;maxReward = reward[i] * k;}for (int j = i + 1; j < m; j++) {if (risk[i] + risk[j] > x) continue;int cnti = restrict[i], cntj = restrict[j];if (reward[i] > reward[j]) {   // i,j 谁回报率高优先投谁cnti = min(cnti, n);cntj = min(cntj, n - cnti);} else {cntj = min(cntj, n);cnti = min(cnti, n - cntj);}if (reward[i] * cnti + reward[j] * cntj > maxReward) {rs.clear();rs[i]     = cnti;rs[j]     = cntj;maxReward = reward[i] * cnti + reward[j] * cntj;}}}// 输出每个产品的最优投资数量for (int i = 0; i < m; i++) {cout << rs[i] << " ";}cout << endl;return 0;
}

‍❤️‍有考友通过专栏已经快速通过机考,都是原题哦~~ 💪

📝 订阅 http://t.csdnimg.cn/lifXk

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

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

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

相关文章

【PHP安全】PHP伪协议

PHP伪协议&#xff1a; file:// #访问本地文件系统http:// #访问HTTPs网址ftp:// #访问ftp URLphp:// #访问输入输出流zlib:// #压缩流data:// #数据&#xff08;RFC 2397&#xff09;ssh2:// #security shell2expect:// #处理交互式的流glob:// #查找匹配的文件路径phar:// #P…

Siamese Network(孪生神经网络)详解

Siamese和Chinese有点像。Siam是古时候泰国的称呼&#xff0c;中文译作暹罗。Siamese也就是“暹罗”人或“泰国”人。Siamese在英语中是“孪生”、“连体”的意思&#xff0c;这是为什么呢&#xff1f;十九世纪泰国出生了一对连体婴儿&#xff0c;当时的医学技术无法使两人分离…

软件功能测试内容有哪些?湖南长沙软件测评公司分享

软件功能测试主要是验证软件应用程序的功能&#xff0c;且不管功能是否根据需求规范运行。是通过给出适当的输入值&#xff0c;确定输出并使用预期输出验证实际输出来测试每个功能。也可以看作“黑盒测试”&#xff0c;因为功能测试不用考虑程序内部结构和内部特性&#xff0c;…

Orange3数据预处理(清理特征组件)

清理特征 移除未使用的属性值和无用的属性&#xff0c;并对剩余的值进行排序。 输入 数据: 输入数据集 输出 数据: 过滤后的数据集 命名属性定义有时包含在数据中不出现的值。即使原始数据中没有这种情况&#xff0c;数据过滤、选择示例子集等操作也可能移除…

(二十五)Flask之MTVMVC架构模式Demo【重点:原生session使用及易错点!】

目录&#xff1a; 每篇前言&#xff1a;MTV&MVC构建一个基于MTV模式的Demo项目&#xff1a;蹦出一个问题&#xff1a; 每篇前言&#xff1a; &#x1f3c6;&#x1f3c6;作者介绍&#xff1a;【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领…

关于Transfomer的思考

为何诞生 在说transformer是什么&#xff0c;有什么优势之类的之前&#xff0c;先谈一谈它因何而诞生。transformer诞生最重要的原因是早先的语言模型&#xff0c;比如RNN&#xff0c;由于其本身的训练机制导致其并行度不高&#xff0c;特别是遇到一些长句子的情况下。其次&…

抖音开放平台第三方开发,实现代小程序备案申请

大家好&#xff0c;我是小悟 抖音小程序备案整体流程总共分为五个环节&#xff1a;备案信息填写、平台初审、工信部短信核验、通管局审核和备案成功。 服务商可以代小程序发起备案申请。在申请小程序备案之前&#xff0c;需要确保小程序基本信息已填写完成、小程序至少存在一个…

硬件笔记(26)---- 高速电路中滤波电容的选取

先要知道电容的等效电路 其中ESL取决于电容的类型和封装&#xff0c;一般用贴片陶瓷电容为例&#xff0c;对于直插式电解电容&#xff0c;他们的ESL很大。按下表&#xff0c;封装越大&#xff0c;ESL越大&#xff0c;但是0612有些例外 0612和1206就是 长短边的区别&#xff0c;…

什么是MVC三层结构

1.MVC&#xff08;三层结构&#xff09; MVC&#xff08;Model-View-Controller&#xff09;是一种常见的软件设计模式&#xff0c;用于将应用程序的逻辑和界面分离成三个不同的组件。每个组件负责特定的任务&#xff0c;从而提高代码的可维护性和可扩展性。 以前的模式。 遇到…

【网络安全渗透】常见文件上传漏洞处理与防范

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属的专栏&#xff1a;网络安全渗透 景天的主页&#xff1a;景天科技苑 文章目录 1.文件上传漏洞1.1. 描述1.2. 危害1.3. 有关文件上传的知识1.4…

【兔子机器人】修改GO、车轮电机ID(软件方法、硬件方法)以及修正VMC腿部初始化夹角

一、GO电机修改ID 1、硬件方法 利用上位机直接修改GO电机的id号&#xff1a; 打开调试助手&#xff0c;点击“调试”&#xff0c;查询电机&#xff0c;修改id号&#xff0c;即可。 但先将四个GO电机连接线拔掉&#xff0c;不然会将连接的电机一并修改。 利用24V电源给GO电机…

Java_12 杨辉三角 II

杨辉三角 II 给定一个非负索引 rowIndex&#xff0c;返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1] 示例 2: 输入: rowIndex 0 输出: [1] 示例 3: 输入: rowIndex 1 输…

【应急响应靶场web2】

文章目录 前言 一、应急响应 1、背景 2、webshell查杀 3、日志排查 1&#xff09;apache日志 2&#xff09;nginx日志 3&#xff09;ftp日志 4、隐藏账户 5、文件筛选 二、漏洞复现 总结 前言 靶场来源&#xff1a;知攻善防实验室 一、应急响应 1、背景 小李在某…

VMware 配置虚拟机网络

之前需要完成的任务 &#xff08;1&#xff09;、下载和安装VMware-Workstation-Pro.exe软件&#xff0c;推荐16.0版本 &#xff08;2&#xff09;、下载centOS7镜像&#xff0c;可以在阿里云下载。 &#xff08;3&#xff09;、VM创建一个虚拟机&#xff0c;并且使用本地已下载…

中东社媒Snapchat如何注册?

Snapchat是一款图片分享软件应用。利用该应用程序&#xff0c;用户可以拍照、录制影片、撰写文字和图画,并传送到自己在该应用上的好友列表。现如今&#xff0c;Snapchat也成为独立战引流然而&#xff0c;即使如此受欢迎&#xff0c;Snapchat的注册使用仍然是新手的难题&#x…

Java基于 Springboot+Vue 的招生管理系统,前后端分离

博主介绍&#xff1a;✌程序员徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【全志H616】1 --用orangepi控制硬件

【全志H616】1 --用orangepi控制硬件 本文介绍了如歌用orangepi 控制蜂鸣器&超声波模块&#xff0c;通过键盘输入1、2、3、4来控制转动角度舵机模块&#xff1b;同时还介绍了利用全志如何配置定时器&#xff1b;以及查看H616引脚状态的命令等… 超声波模块和舵机模块的讲解…

德人合科技 | 公司办公终端、电脑文件资料 \ 数据透明加密防泄密管理软件系统

天锐绿盾是一款全面的企业级数据安全解决方案&#xff0c;它专注于为企业办公终端、电脑文件资料提供数据透明加密防泄密管理。 首页 德人合科技——www.drhchina.com 这款软件系统的主要功能特点包括&#xff1a; 1. **透明加密技术**&#xff1a; 天锐绿盾采用了透明加密技…

Android Gradle 编译过程中的优化

} 但是反射没有办法能很好的识别&#xff0c;所以如果代码中有使用反射需要自行处理&#xff0c;以免被删除。 shrink resource 功能 shrink code流程执行完后删除了无用的代码后&#xff0c;就能确认哪些资源文件没有使用&#xff0c;shrink resource流程就是确定哪些资源…

DB107-ASEMI智能LED灯具专用DB107

编辑&#xff1a;ll DB107-ASEMI智能LED灯具专用DB107 型号&#xff1a;DB107 品牌&#xff1a;ASEMI 封装&#xff1a;DB-4 正向电流&#xff08;Id&#xff09;&#xff1a;1A 反向耐压&#xff08;VRRM&#xff09;&#xff1a;1000V 正向浪涌电流&#xff1a;50A 正…