最新华为OD机试真题-虚拟理财游戏(100分)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新 华为OD机试-D卷 的三语言AC题解

👏 感谢大家的订阅➕ 和 喜欢💗

📎在线评测链接

=> 虚拟理财游戏(100分) <=

🌍 评测功能需要订阅专栏后私信联系清隆解锁~

华为OD

🌍 评测功能需要 =>订阅专栏<= 后联系清隆解锁~

🍓OJ题目截图

alt

🕹 虚拟理财游戏

题目描述

在一款虚拟游戏中,玩家需要通过投资来增加自己的资产,以免被淘汰出局。游戏中有一家银行提供 个理财产品,每个产品的风险和投资回报不同。玩家拥有 元的初始资金,可以接受的总风险值为

为了在游戏中取得胜利,玩家需要在可接受的风险范围内,选择最优的投资方式以获得最大回报。游戏规则如下:

  1. 每项投资的风险值相加为总风险值。
  2. 玩家最多只能投资 个理财产品。
  3. 投资金额必须为整数,不能拆分为小数。
  4. 投资回报 = 投资金额 × 回报率。

现在请你帮助玩家设计一个最佳的投资策略。

输入格式

第一行包含三个整数 ,分别表示理财产品数量、总投资金额和可接受的风险值。

第二行包含 个整数,表示每个理财产品的投资回报率。

第三行包含 个整数,表示每个理财产品的风险值。

第四行包含 个整数,表示每个理财产品的最大投资额度。

输出格式

输出一行,包含 个整数,表示在每个理财产品上的投资金额。如果不投资某个产品,则对应的投资金额为

样例输入

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在线评测

全部评论
🌍 评测功能需要 订阅专栏 后联系清隆解锁~ #华为od#
点赞 回复 分享
发布于 07-02 19:08 浙江
你好,我感觉这里是不是有点问题啊? 比如输入: 2 100 100 //2类产品 100最大投资 100最大风险 10 100 //回报 10 100 10 10 //风险 10 10 20 90 //投资量 20 90 按照您写的java代码,执行后输出: 0 90 //第一类投资0,第二类投资90 但是,最优解应该是 10 90,即第一类投资10,第二类投资90才对啊?
点赞 回复 分享
发布于 07-08 21:59 四川
5 100 10 10 20 30 40 50 3 4 5 6 10 20 90 20 40 30 这个示例的答案好像有问题
点赞 回复 分享
发布于 08-02 16:27 江苏

相关推荐

和蔼:在竞争中脱颖而出,厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
在秋招的香菇很中二:把实践经历、校园经历删了,把课设包装成项目经历写上去。
点赞 评论 收藏
分享
1 3 评论
分享
牛客网
牛客企业服务