华为OD机试真题 JavaScript 实现【云短信平台优惠活动】【2023Q1 200分】,附详细解题思路

目录

华为OD机试 2023B卷题库疯狂收录中,刷题++点这里++

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

某云短信厂商,为庆祝国庆,推出充值优惠活动。

现在给出客户预算,和优惠售价序列,求最多可获得的短信总条数。

二、输入描述

第一行客户预算M,其中 0<=M<=1000000。

第二行给出售价表,P1,P2...Pn, 其中 1<=n<=100,Pi为充值i元获得的短信条数。 1<=Pi<=1000, 1<=n<=100。

三、输出描

最多获得的短信条数。

四、解题思路

  1. 如果客户预算小于0 或者 已计算的元素下角标大于客户预算,返回当前短信条数;
  2. 从已计算的元素下角标开始遍历出售价表;① 计算充值金额为i+1元时获得的短信条数,递归调用(客户预算、出售价表、短信条数msgCount + arr[i]、已计算的元素下角标);② 计算未选择当前售价时获得的短信条数p2,递归调用,③ 更新max,为max、p1、p2中的最大值;
  3. 返回最多获得的短信条数;

五、JavaScript算法源码

javascript 复制代码
function getMaxMsgCount(money, arr, msgCount, usedIndex) {
  if (money <= 0 || usedIndex > money) {
    return msgCount;
  }
  let max = Number.MIN_SAFE_INTEGER;
  for (let i = usedIndex; i < arr.length; i++) {
    let p1 = 0;
    if (money - i - 1 >= 0) {
      p1 = getMaxMsgCount(money - i - 1, arr, msgCount + arr[i], usedIndex);
    }
    const p2 = getMaxMsgCount(money, arr, msgCount, usedIndex + 1);
    max = Math.max(max, Math.max(p1, p2));
  }
  return max;
}

六、效果展示

1、输入

10

10 20 30 50 70 100

2、输出

150

3、说明

分两次充值最优,4元、6元各充一次。总条数 50+100=150

🏆下一篇:华为OD机试真题 JavaScript 实现【贪心的商人】【2023Q1 100分】

🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

相关推荐
IOT-Power7 分钟前
QT 对话框(QDialog)中 accept、reject、exec、open的使用
开发语言·qt
清风徐来QCQ9 分钟前
SpringMvC
前端·javascript·vue.js
froginwe119 分钟前
ASP Session
开发语言
Smoothzjc10 分钟前
👉 求你了,别再裸写 fetch 做 AI 流式响应了!90% 的人都在踩这个坑
前端·人工智能·后端
沛沛老爹10 分钟前
Web开发者进阶AI:Agent技能设计模式之迭代分析与上下文聚合实战
前端·人工智能·设计模式
lbb 小魔仙17 分钟前
【Python】零基础学 Python 爬虫:从原理到反爬,构建企业级爬虫系统
开发语言·爬虫·python
yong999018 分钟前
基于MATLAB的大变形悬臂梁求解程序
前端·数据库·matlab
Swift社区19 分钟前
ArkTS Web 组件里,如何通过 javaScriptProxy 让 JS 同步调用原生方法
开发语言·前端·javascript
Q741_14719 分钟前
海致星图招聘 数据库内核研发实习生 一轮笔试 总结复盘(1) 作答语言:C/C++ 链表 二叉树
开发语言·c++·经验分享·面试·笔试
小和尚敲木头20 分钟前
记录一次vue3中this引发的开发没有问题,生产发生问题的分析
前端·vue