首页 > 编程语言 >【华为OD机试真题】C卷-虚拟理财游戏(JAVA)

【华为OD机试真题】C卷-虚拟理财游戏(JAVA)

时间:2024-03-29 10:33:32浏览次数:32  
标签:java investI JAVA 真题 int OD util risks import

一、题目描述

【华为OD机试真题】C卷-虚拟理财游戏(JAVA)

题目描述:

在一款虚拟游戏中生活,你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。
现有一家Bank,它提供有若干理财产品 m 个,风险及投资回报不同,你有 N(元)进行投资,能接收的总风险值为X。
你要在可接受范围内选择最优的投资方式获得最大回报。

备注:
在虚拟游戏中,每项投资风险值相加为总风险值;
在虚拟游戏中,最多只能投资2个理财产品;
在虚拟游戏中,最小单位为整数,不能拆分为小数;
投资额*回报率=投资回报

二、输入输出

输入描述:
第一行:
产品数(取值范围[1,20])
总投资额(整数,取值范围[1, 10000])
可接受的总风险(整数,取值范围[1,200])
第二行:产品投资回报率序列,输入为整数,取值范围[1,60]
第三行:产品风险值序列,输入为整数,取值范围[1, 100]
第四行:最大投资额度序列,输入为整数,取值范围[1, 10000]

输出描述:
每个产品的投资额序列

三、参考示例

用例
输入:
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. 遍历产品,选择最佳投资方案。
  3. 根据风险和背景收益计算投资收益,选择最优方案。
  4. 输出最终选择的投资方案。

五、参考代码

/*
 * @Author: mgc
 * @Date: 2024-02-02 17:47:00
 * @LastEditors: Do not edit
 * @LastEditTime: 2024-02-02 17:48:55
 */

// import java.util.*;
// import java.util.HashMap;
// import java.util.Scanner;
// import java.util.regex.Matcher;
// import java.util.stream.Stream;
// import java.util.regex.Pattern;
// import java.util.stream.Collectors;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
import java.util.StringJoiner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取输入参数
        int[] inputParams = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        int productCount = inputParams[0]; // 产品数
        int totalInvestment = inputParams[1]; // 总投资
        int totalRisk = inputParams[2]; // 总风险

        int[] backReturns = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        int[] risks = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        int[] investments = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();

        int maxInvestBack = 0;
        int maxInvestBackRisk = Integer.MAX_VALUE;
        HashMap<Integer, Integer> selection = new HashMap<>();

        // 选择最佳投资方案
        for (int i = 0; i < productCount; i++) {
            if (risks[i] <= totalRisk) {
                int investI = Math.min(investments[i], totalInvestment);
                int investBack = investI * backReturns[i];

                if (investBack > maxInvestBack || (investBack == maxInvestBack && risks[i] < maxInvestBackRisk)) {
                    maxInvestBack = investBack;
                    maxInvestBackRisk = risks[i];
                    selection.clear();
                    selection.put(i, investI);
                }
            } else {
                continue;
            }

            for (int j = i + 1; j < productCount; j++) {
                if (risks[i] + risks[j] <= totalRisk) {
                    int investI;
                    int investJ;

                    if (backReturns[i] > backReturns[j]) {
                        investI = Math.min(totalInvestment, investments[i]);
                        investJ = Math.min(totalInvestment - investI, investments[j]);
                    } else if (backReturns[i] < backReturns[j]) {
                        investJ = Math.min(totalInvestment, investments[j]);
                        investI = Math.min(totalInvestment - investJ, investments[i]);
                    } else if (risks[i] > risks[j]) {
                        investJ = Math.min(totalInvestment, investments[j]);
                        investI = Math.min(totalInvestment - investJ, investments[i]);
                    } else {
                        investI = Math.min(totalInvestment, investments[i]);
                        investJ = Math.min(totalInvestment - investI, investments[j]);
                    }

                    int investBack = investI * backReturns[i] + investJ * backReturns[j];
                    int investBackRisk = risks[i] + risks[j];

                    if (investBack > maxInvestBack || (investBack == maxInvestBack && investBackRisk < maxInvestBackRisk)) {
                        maxInvestBack = investBack;
                        maxInvestBackRisk = investBackRisk;
                        selection.clear();
                        if (investI > 0) selection.put(i, investI);
                        if (investJ > 0) selection.put(j, investJ);
                    }
                }
            }
        }

        // 输出最终选择的投资方案
        StringJoiner result = new StringJoiner(" ");
        for (int i = 0; i < productCount; i++) {
            if (selection.containsKey(i)) {
                result.add(selection.get(i) + "");
            } else {
                result.add("0");
            }
        }

        System.out.println(result);
    }
}

六、华为OD机试真题汇总目录

    【华为OD机试】真题汇总A+B+C+D券(Python实现)

    【华为OD机试】真题汇总A+B+C+D卷(JAVA实现)

    【华为OD机试】真题汇总A+B+C+D卷(C++实现)

标签:java,investI,JAVA,真题,int,OD,util,risks,import
From: https://blog.csdn.net/u014481728/article/details/137060694

相关文章

  • 除自身以外数组的乘积 - LeetCode 热题 16
    大家好!我是曾续缘......
  • 【NoSQL】MongoDB
    文章目录概述NoSQL数据库四大家族mongodb和mysql存储数据形式有什么不同概念适用场景环境搭建1、下载2、安装基础入门高级查询聚合和管道索引备份和恢复来源概述MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储......
  • 合并区间 - LeetCode 热题 14
    大家好!我是曾续缘......
  • 2. Java基本语法
    文章目录2.Java基本语法2.1关键字保留字2.1.1关键字2.1.2保留字2.1.3标识符2.1.4Java中的名称命名规范2.2变量2.2.1分类2.2.2整型变量2.2.3浮点型2.2.4字符型char2.2.5Unicode编码2.2.6UTF-82.2.7boolean类型2.3基本数据类型转换2.3.1自动类型转换2.2......
  • 业务地址关联匹配标准地址库-Java
    地名作为最常用的社会公共信息,不仅与人们的日常生活息息相关,而且是政府行政行为、经济建设不可缺少的基础信息资源。在政务系统中有许多需要将业务地址关联到标准地址的场景,addresstool致力于解决地址关联匹配算法中的速度和准确性问题。经实测,addresstool的地址关联速度在5000/秒......
  • Leetcode 第 126 场双周赛题解
    Leetcode第126场双周赛题解Leetcode第126场双周赛题解题目1:3079.求出加密整数的和思路代码复杂度分析题目2:3080.执行操作标记数组中的元素思路代码复杂度分析题目3:3081.替换字符串中的问号使分数最小思路代码复杂度分析题目4:3082.求出所有子序列的能量和思......
  • SinoDB备份恢复工具之onbar
    onbar是SinoDB数据库的备份工具之一,它可以根据用户选择的线程数量并行地运行备份或恢复。不同于ontape,onbar必须先安装和配置存储管理器,进行才能备份和恢复。1.onbar功能特性支持选择具体的存储空间进行备份或恢复支持基于时间点的恢复支持执行单独的物理和逻辑恢复......
  • Leetcode 第 388 场周赛题解
    Leetcode第388场周赛题解Leetcode第388场周赛题解题目1:3074.重新分装苹果思路代码复杂度分析题目2:3075.幸福值最大化的选择方案思路代码复杂度分析题目3:3076.数组中的最短非公共子字符串思路代码复杂度分析题目4:3077.K个不相交子数组的最大能量值思路代码......
  • 解决import javax.swing.JTable;偶发性复制不了的问题
    解决方法:重写JTable类的键盘监听事件。 /** *20240313addhzh */ table.addKeyListener(newKeyListener(){ @Override publicvoidkeyPressed(KeyEvente){ //System.out.println("22222"); System.out.println("keycode"+e.getKeyCode())......
  • 聊聊 Java GC
    [1]序GC是每一个Java程序员不可绕过的话题。GC是在某些时候对内存的垃圾对象数据进行搜寻定位,然后进行内存空间回收。根据这个定义,则学习GC相关知识,需要关注:对JVM整个内存结构中哪些区域进行垃圾回收;在这些内存区域中的类数据或者实例数据等数据结构是什么样子的;然后想想如......