华为OD机试统一考试D卷C卷 - 虚拟游戏理财
题目描述
在一款虚拟游戏中生活,你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。
现有一家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 |
Java
import java.util.Arrays; import java.util.Scanner; import java.util.StringJoiner; public class Main { public static void main(String[] args) { // 创建Scanner对象用于获取用户输入 Scanner sc = new Scanner(System.in); // 读取一行输入并将其分割为字符串数组,然后转换为整数数组 int[] tmp = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray(); // 获取投资项目数量m、总投资额N和风险容忍度X int m = tmp[0]; int N = tmp[1]; int X = tmp[2]; // 读取每个项目的预期回报率 int[] returns = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray(); // 读取每个项目的风险值 int[] risks = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray(); // 读取每个项目的最大投资额 int[] maxInvestments = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray(); // 初始化最大回报为0 int maxReturn = 0; // 初始化最大回报对应的投资方案数组 int[] bestInvestments = new int[m]; // 遍历所有项目 for (int i = 0; i < m; i++) { // 如果单个项目的风险在容忍度范围内 if (r
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
华为OD机试刷题 文章被收录于专栏
华为OD机试刷题记录机考算法题库,帮助你上岸华为。提供C++/Java、JavaScript、Python四种语言的解法。