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

news2025/1/19 3:32:30

在这里插入图片描述

一、题目描述

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

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

二、输入描述

第一行客户预算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. 返回最多获得的短信条数;

五、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    // 客户预算M
    Integer M = Integer.parseInt(sc.nextLine());
    // 出售价表
    int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();

    System.out.println(getMaxMsgCount(M, arr, 0, 0));
}

/**
 *
 * 获取最多短信条数
 * @param money 客户预算
 * @param arr 出售价表
 * @param msgCount 短信条数
 * @param usedIndex 已计算的元素下角标
 * @return
 */
private static int getMaxMsgCount(Integer money, int[] arr, int msgCount, int usedIndex) {
    // 1、如果客户预算小于0 或者 已计算的元素下角标大于客户预算,返回当前短信条数
    if (money <= 0 || usedIndex > money) {
        return msgCount;
    }
    // 最多获得的短信条数
    int max = Integer.MIN_VALUE;
    // 2、从已计算的元素下角标开始遍历出售价表
    for (int i = usedIndex; i < arr.length; i++) {
        int p1 = 0;
        if (money - i - 1 >= 0) {
            // 2.1 计算充值金额为i+1元时获得的短信条数
            // 递归调用(客户预算、出售价表、短信条数msgCount + arr[i]、已计算的元素下角标)
            p1 = getMaxMsgCount(money - i - 1, arr, msgCount + arr[i], usedIndex);
        }
        // 2.2 计算未选择当前售价时获得的短信条数p2,递归调用
        int p2 = getMaxMsgCount(money, arr, msgCount, usedIndex + 1);
        // 2.3 更新max,为max、p1、p2中的最大值
        max = Math.max(max, Math.max(p1, p2));
    }
    // 3、返回最多获得的短信条数
    return max;
}

六、效果展示

1、输入

10
10 20 30 50 70 100

2、输出

150

3、说明

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

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【获得完美走位】【2023Q1 100分】

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/576058.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试真题B卷 Java 实现【小朋友排队】

一、题目描述 小明今年升学到了小学1年级&#xff0c;来到新班级后&#xff0c;发现其他小朋友身高参差不齐&#xff0c;然后就想基于每个小朋友和自己的身高差&#xff0c;对他们进行排序&#xff0c;请帮他实现排序。 二、输入描述 第一行为正整数h和n。 0 < h < 2…

算法基础学习笔记——⑤离散化\区间和并

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法基础学习 目录 ✨简述 特指整数离散化 &#x1f353;离散化模板&#xff1a; ✨区间和并 &#x1f353;区间和并模板&#xff1a; 前言&#xff1a;算法学习笔记记录日常分享&#xff0c;需要的看哈O(∩_∩)O&#xff0…

【树上差分+LCA】篮球杯 砍树

省赛的题现在来补 感觉什么都不会&#xff0c;已经要没了 题意&#xff1a; 思路&#xff1a; 考虑一条边&#xff0c;两端有两棵子树 有这样的性质&#xff1a; 这条边两端的结点的经过次数M 因此每加一个点对&#xff0c;都对其路径1 s[u]M时&#xff0c;与该点连着的…

大数据Doris(二十八):Broker Load通配符导入HDFS数据并指定列顺序

文章目录 Broker Load通配符导入HDFS数据并指定列顺序 一、创建Doris表 2、准备HDFS数据

Maven学习笔记(基础篇)22版

1. 概述部分 1. 什么是 Maven&#xff1f; 为什么要学习Maven&#xff1f; 管理规模庞大的 jar 包&#xff0c;需要专门工具。脱离 IDE 环境执行构建操作&#xff0c;需要专门工具。 1、构建 Java 项目开发过程中&#xff0c;构建指的是使用『原材料生产产品』的过程。 原…

二叉树的镜像 JZ27

目录 链接 描述 示例 代码 演示结果 链接 二叉树的镜像_牛客题霸_牛客网 描述 示例 代码 /*** struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* };*/ class Solution …

花朵识别系统Python实现,深度学习卷积神经网络算法

一、背景 花朵识别系统&#xff0c;基于Python实现&#xff0c;深度学习卷积神经网络&#xff0c;通过TensorFlow搭建卷积神经网络算法模型&#xff0c;并对数据集进行训练最后得到训练好的模型文件&#xff0c;并基于Django搭建可视化操作平台。 在当今信息化社会&#xff0c…

算法基础学习笔记——⑥链表\栈\队列

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法基础学习 目录 ✨单链表 &#x1f353;单链表模板&#xff1a; ✨双链表 &#x1f353;双链表模板&#xff1a; &#x1f353;循环链表图&#xff1a; ✨栈 &#x1f353;栈模板&#xff1a; ✨队列 &#x1f353;队…

【脚本工具】SVG路径中的A指令转DXF的圆弧和椭圆弧 C++代码实现

文章目录 一、SVG路径的A指令的语法说明二、DXF中的圆弧和椭圆弧对象2.1 圆弧对象2.2 椭圆弧对象 三、转DXF圆弧3.1 数学公式3.2 代码实现3.3 转换效果展示 四、转DXF椭圆弧4.1 数学公式4.2 代码实现4.3 转换效果展示 一、SVG路径的A指令的语法说明 目前Svg的Arc的参数字符串如…

leetcode--分隔链表(java)

分割链表 leetcode 86 分割链表 &#xff08;中等&#xff09;解题思路&#xff1a;链表专题 leetcode 86 分割链表 &#xff08;中等&#xff09; leetcode 86 分割链表 原题链接&#xff0c;可以直接测试 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进…

怎么给苹果手机设备画面投屏到电脑上面?

虽然使用苹果设备自带的AirPlay功能&#xff0c;搭配其推出的Apple TV设备&#xff0c;可实现苹果设备的投屏播放&#xff0c;但相信很多人都不会花大价钱去购入Apple TV&#xff0c;如果是土豪的话请随意。 那么&#xff0c;没有Apple TV&#xff0c;苹果设备就不能投屏了吗&…

sql注入学习-知识点大合集

目录 &#xff08;一&#xff09;sql注入了解&#xff1a; 1.1什么是sql注入 1.2 sql注入的分类 &#xff08;二&#xff09;sql注入详解&#xff1a; 2.1.MySQL注入 2.2.1在MySQL注入中&#xff0c;会用到的知识 2.2.2mysql常用语句与常见 2.2.3msyql注入内容详解 2.2…

首发出炉Yolov5/Yolov7涨点神器:华为诺亚2023极简的神经网络模型 VanillaNet---VanillaBlock助力检测,实现暴力涨点

在​crack缺陷检测项目map 0.954提升至 0.979,涨点明显,博主多个数据集亲测有效,实现暴力涨点; 1.VanillaNet 论文:https://arxiv.org/pdf/2305.12972.pdf 来自华为诺亚、悉尼大学的研究者们提出了一种极简的神经网络模型 VanillaNet,以极简主义的设计为理念,网络中仅仅…

connect reset/timeout/reject 排查

异常排查 问题描述问题处理初步分析http配置即服务整体情况整体排查服务重启gcCPUJVM 暂存疑问点总结启动参数要配全监控体系健全科学使用jar包降配参数是参数得动态变 问题描述 最初出现的时候&#xff0c;是在每天的早上8-10这个时间范围内&#xff0c;服务A上的有一个接口时…

第一行代码 第十二章 Material Design实战

第12章 Material Design实战 其实长久以来&#xff0c;大多数人都认为Android系统的UI并不算美观&#xff0c;至少没有iOS系统的美观。以至于很多IT公司在进行应用界面设计的时候&#xff0c;为了保证双平台的统一性&#xff0c;强制要求Android端的界面风格必须和iOS端一致。…

Java08——继承

1. 继承 父类&#xff1a; package com.zsq.extend.improve_; //是pupil和graduate的父类 public class Student {public String name;public int age;private double score;public void info(){System.out.println("姓名&#xff1a;" name " 年龄&#xff1…

六级备考21天|CET-6|写作技巧2|13:00~14:40

目录 【一】写作技巧1的作业 [1]Creativity [2]谚语&#xff1a;值得做的就值得做得好 [3]Star chasing 追星​ [4]team spirit&communication 团队精神和交流 [5]谚语&#xff1a;理解​ 【二】谚语重要性开头模版 [1]谚语&#xff1a;Understand 理解 【三】社会…

【历史上的今天】4 月 26 日:验证码的发明者诞生;切尔诺贝利病毒爆发;诺基亚收购 Withings

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 4 月 26 日&#xff0c;在 2017 年的今天&#xff0c;中国首艘国产 001A 型航空母舰在大连完成了下水&#xff0c;从开工到下水&#xff0c;历时 3 年多时间。…

5月跳槽进字节跳动测试岗了,面试真简单...

前言: 最近金三银四跳槽季&#xff0c;相信很多小伙伴都在面试找工作&#xff0c; 怎样才能拿到大厂的offer&#xff0c;没有掌握绝对的技术&#xff0c;那么就要不断的学习&#xff0c;没有绝对的天才&#xff0c;只有持续不断的付出。对于我们每一个平凡人来说&#xff0c;…

利用Servlet编写第一个“hello world“

利用Servlet编写第一个"hello world" &#x1f50e;创建 Maven 项目&#x1f50e;引入依赖&#x1f50e;创建目录&#x1f50e;编写代码&#x1f50e;打包代码&#x1f50e;部署&#x1f50e;程序验证&#x1f50e;结尾 &#x1f50e;创建 Maven 项目 Maven 是一个构…