2024年华为OD机试真题-虚拟游戏理财

题目描述:

在一款虚拟游戏中生活,你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。现有一家Bank,它提供有若干理财产品m,风险及投资回报不同,你有N(元)进行投资,能接受的总风险值为X。

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

说明:

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

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

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

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

输入描述:

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

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

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

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

输出描述:

每个产品的投资额序列

补充说明:

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

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

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

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

示例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

解题思路:

循环进行逻辑判断,注意不要超时。

c++解法:

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int main() {
    int n, max_price, max_risk;
    int reward_per[30], risk[30], price[30];
 
    scanf("%d%d%d", &n, &max_price, &max_risk);
    for (int i = 0; i < n; ++i) {
        scanf("%d", &reward_per[i]);
    }
    for (int i = 0; i < n; ++i) {
        scanf("%d", &risk[i]);
    }
    for (int i = 0; i < n; ++i) {
        scanf("%d", &price[i]);
    }
 
   
 
    */
    int maxx = 0;
    int ans[30]{ 0 };
    for (int i = 0; i < n; ++i) {
       
        int c = min(max_price, price[i]);
        if (risk[i] <= max_risk && c * reward_per[i] >= maxx) {
            maxx = c * reward_per[i];
            memset(ans, 0, sizeof(ans));
            ans[i] = c;
        }
 
       
        for (int j = i + 1; j < n

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

华为OD机试题库2024年 文章被收录于专栏

2024年OD统一考试(D卷),最新最完整题库。 收录130+道真题,提供解题思路,Java/Python/C++三种答案源码。

全部评论
哈哈,机考遇到了这道原题
点赞
送花
回复 分享
发布于 06-30 09:04 江苏
南京od招聘,需要的联系我哈
点赞
送花
回复 分享
发布于 06-30 18:39 江苏
秋招专场
校招火热招聘中
官网直投

相关推荐

5 7 评论
分享
牛客网
牛客企业服务