最新华为OD机试真题-虚拟理财游戏(100分)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员
✨ 本系列打算持续跟新 华为OD机试-D卷 的三语言AC题解
👏 感谢大家的订阅➕ 和 喜欢💗
📎在线评测链接
🌍 评测功能需要订阅专栏后私信联系清隆解锁~
🌍 评测功能需要 =>订阅专栏<= 后联系清隆解锁~
🍓OJ题目截图
🕹 虚拟理财游戏
题目描述
在一款虚拟游戏中,玩家需要通过投资来增加自己的资产,以免被淘汰出局。游戏中有一家银行提供 个理财产品,每个产品的风险和投资回报不同。玩家拥有 元的初始资金,可以接受的总风险值为 。
为了在游戏中取得胜利,玩家需要在可接受的风险范围内,选择最优的投资方式以获得最大回报。游戏规则如下:
- 每项投资的风险值相加为总风险值。
- 玩家最多只能投资 个理财产品。
- 投资金额必须为整数,不能拆分为小数。
- 投资回报 = 投资金额 × 回报率。
现在请你帮助玩家设计一个最佳的投资策略。
输入格式
第一行包含三个整数 、 和 ,分别表示理财产品数量、总投资金额和可接受的风险值。
第二行包含 个整数,表示每个理财产品的投资回报率。
第三行包含 个整数,表示每个理财产品的风险值。
第四行包含 个整数,表示每个理财产品的最大投资额度。
输出格式
输出一行,包含 个整数,表示在每个理财产品上的投资金额。如果不投资某个产品,则对应的投资金额为 。
样例输入
5 100 10
10 20 30 40 50
3 4 5 6 10
20 30 20 40 30
样例输出
0 30 0 40 0
数据范围
- 投资回报率
- 风险值
- 最大投资额度
题解
可以暴力枚举所有的投资组合,并计算每种组合的总风险值和总回报。在满足风险值不超过 且投资总额不超过 的情况下,选择总回报最大的组合作为最优投资策略。
参考代码
- Python
n, total, k = map(int, input().split())
hb = list(map(int, input().split()))
fx = list(map(int, input().split()))
tze = list(map(int, input().split()))
res = []
zhb = 0
ans = [0] * n
for i in range(n):
zhb1 = hb[i] * tze[i]
if fx[i] <= k and tze[i] <= total:
if zhb1 > zhb:
zhb = zhb1
res = [i]
for j in range(i + 1, n):
if fx[i] + fx[j] <= k and tze[i] + tze[j] <= total:
zhb2 = hb[j] * tze[j]
if zhb1 + zhb2 > zhb:
zhb = zhb1 + zhb2
res = [i, j]
for idx in res:
ans[idx] = tze[idx]
print(*ans)
- Java
import java.util.Scanner;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int total = scanner.nextInt();
int k = scanner.nextInt();
int[] hb = new int[n];
int[] f
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
最新华为OD机试-E+D卷 文章被收录于专栏
本专栏给大家提供了华为2024最新华为OD-E/D卷的题目汇总和(Java/Cpp/Python)三语言解析 + 部分题目提供OJ在线评测