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++三种答案源码。