华为OD机试 - 硬件产品销售方案 - 回溯(Java 2023 B卷 200分)

news2024/10/6 14:38:09

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、补充说明
    • 五、解题思路
    • 六、Java算法源码
    • 七、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

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

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

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

一、题目描述

某公司目前推出了AI开发者套件、AI加速卡、AI加速模块、AI服务器、智能边缘多种硬件产品,每种产品包含若干个型号。

现某合作厂商要采购金额为amount元的硬件产品搭建自己的AI基座。

假设当前库存有N种产品,每种产品的库存量充足,给定每种产品的价格,记为price(不存在价格相同的产品型号)。

请为合作厂商列出所有可能的产品组合。

二、输入描述

输入包含采购金额amount和产品价格列表price。

第一行为amount,第二行为price。

例如:

500
[100, 200, 300, 500]

三、输出描述

输出为组合列表。

例如:

[[500], [200, 300], [100, 200, 200], [100, 100, 300], [100, 100, 100, 200], [100, 100, 100, 100, 100]]

四、补充说明

  1. 对于给定输入,产品组合少于150种。输出的组合为一个数组,数组的每个元素也是一个数组,表示一种组合方案。如果给定产品无法组合金额为amount元的方案,那么返回空列表。
  2. 两种组合方案,只要存在一种产品的数量不同,那么方案认为是不同的。
  3. 每种产品型号价格不相同
  4. 1 <= 产品类型数量 <= 30
  5. 100 <= 产品价格 <= 20000
  6. 100 <= 采购金额 <= 50000

五、解题思路

  1. 读取输入的采购金额amount和产品价格列表price。
  2. 将价格列表price解析为整数数组priceArr。
  3. 创建一个全局变量pricesList,用于存储所有可能的产品组合。
  4. 调用递归函数getGroupPrice,传入参数priceArr、0、amount和一个空列表priceList。
    • 如果剩余采购金额remainMount小于0,说明当前组合不满足条件,直接返回。
    • 如果剩余采购金额remainMount等于0,说明当前组合满足条件,将priceList加入pricesList中。
    • 如果剩余采购金额remainMount大于0,说明还有采购金额,从当前位置index开始循环遍历价格列表priceArr。
      • 将当前价格加入priceList中。
      • 调用递归函数getGroupPrice,传入参数priceArr、i、remainMount减去当前价格,以及更新后的priceList。
      • 移除priceList最后一个元素,以便尝试下一个价格。
  5. 输出所有可能的产品组合。遍历pricesList,对于每个组合,输出一个列表形式的字符串。
    • 遍历当前组合的价格列表subcur,输出每个价格。
    • 如果不是当前组合的最后一个价格,输出逗号和空格。
    • 如果不是最后一个组合,输出逗号和空格。
  6. 完成输出。

六、Java算法源码

// 所有可能的产品组合
static List<List<Integer>> pricesList = new ArrayList<>();

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    // 采购金额amount
    int amount = Integer.valueOf(sc.nextLine());

    // 产品价格列表price
    String price = sc.nextLine();
    // [100, 200, 300, 400]
    int[] priceArr = Arrays.stream(price.substring(1, price.length() - 1).split(",")).map(o->o.trim()).mapToInt(Integer::parseInt).toArray();

    getGroupPrice(priceArr, 0, amount, new ArrayList<>());
    System.out.print("[");
    for (int i = 0; i < pricesList.size(); i++) {

        List<Integer> subcur = pricesList.get(i);
        System.out.print("[");

        for (int j = 0; j < subcur.size(); j++) {
            System.out.print(subcur.get(j));
            if (j != subcur.size() - 1) {
                System.out.print(", ");
            }
        }
        System.out.print("]");
        if (i != pricesList.size() - 1) {
            System.out.print(", ");
        }
    }
    System.out.print("]");
}

/**
 *
 * @param priceArr 产品价格列表price
 * @param index
 * @param remainMount 剩余采购金额
 * @param priceList 满足条件的产品价格列表集合
 */
public static void getGroupPrice(int[] priceArr, int index, int remainMount, List<Integer> priceList) {
    if (remainMount < 0) {
        return;
    }

    // 如果刚好花完
    if (remainMount == 0) {
        List<Integer> tempList = new ArrayList<>();
        tempList.addAll(priceList);
        pricesList.add(tempList);
        return;
    }

    // 如果还有采购金额
    for (int i = index; i < priceArr.length; i++) {
        priceList.add(priceArr[i]);
        getGroupPrice(priceArr, i, remainMount - priceArr[i], priceList);
        priceList.remove(priceList.size() - 1);
    }
}

七、效果展示

1、输入

500
[100, 200, 300, 500, 500]

2、输出

[[100, 100, 100, 100, 100], [100, 100, 100, 200], [100, 100, 300], [100, 200, 200], [200, 300], [500], [500]]

3、说明

题目很简单,就是你有500块钱,随便采购,看一共能采购多少种组合的硬件产品。

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】

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

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

在这里插入图片描述

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

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

相关文章

【SVN】 代码版本管理工具使用步骤以及全局忽略不需要提交的文件夹

2023年&#xff0c;第36周。给自己一个目标&#xff0c;然后坚持总会有收货&#xff0c;不信你试试&#xff01; SVN是Subversion的简称&#xff0c;是一个开源的版本控制系统&#xff0c;用于管理软件开发过程中的代码版本和文件变更。 它提供了跟踪文件修改、协同开发、版本回…

上海市青少年算法2023年7月月赛(丙组)

T1先行后列 题目描述 从 1 开始的 nm 个整数按照先行后列的规律排列如下: 给定 n 与 m,再给定一个数字 c,请输出 c 所在的行数与列数。 输入格式 第一行:两个整数表示 n 与 m 第二行:一个整数表示 c 输出格式 两个整数:表示 c 所在的行数与列数。 数据范围 1≤n,m≤10000…

Oracle DBlink使用方法

DBlink作用&#xff1a;在当前数据库中访问另一个数据库中的表中的数据 create public database link dblink名称 connect to 对方数据库用户名 identified by 对方数据库用户密码 using (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 要连接的数据库所在服务…

封闭式园区人员定位及轨迹跟踪管理系统的功能和作用

在当今充满竞争的商业环境中&#xff0c;企业安全和员工管理变得尤为重要。尤其是在封闭式园区这样的环境中&#xff0c;确保员工的安全和准确管理变得尤为关键。为了满足这一需求&#xff0c;封闭式园区人员定位及轨迹跟踪管理系统应运而生&#xff0c;该系统结合了最新科技和…

回文链表00

题目链接 回文链表 题目描述 注意点 回文的定义&#xff1a;回文就是反转以后和以前一样的就是回文结构用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题 解答思路 用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题要求有限遍历且避免使用O(n) 额外空间&#xff0c;避免使用 O…

护眼台灯拒交智商税!明基/SUKER书客/米家三款热门护眼台灯深度测评

Hello我是装修研究爱好者&#xff0c;最近后台收到多位家长们咨询&#xff0c;让推荐一款儿童护眼台灯 要求灯光质量和光源稳定&#xff0c;光线舒适护眼效果好的台灯&#xff0c;为此我开始整理儿童护眼台灯攻略 选护眼灯时首先必须关注与护眼相关的指标&#xff0c;其次在考…

打造高效便利的同城跑腿外卖小程序

随着移动互联网的发展&#xff0c;人们的生活方式发生了翻天覆地的变化。外卖行业作为其中的一部分&#xff0c;正日益蓬勃发展。为了满足用户对便利的需求&#xff0c;我们可以开发一个名为“同城跑腿外卖小程序”的应用&#xff0c;让用户能够轻松地下单外卖、送货上门以及处…

python编辑器推荐及配置

vscode首推,(个人喜好) 安装Python解释器 打开Python官网 https://www.python.org/ 在 Downloads 下面选择自己的对应系统&#xff0c;本文以 Windows 为例 下载完成后解压&#xff0c;双击 .exe 文件开始安装 注意勾选下面选项&#xff0c;将其 python.exe 添加到环境变量…

OA项目之会议通知(查询是否参会反馈详情)

目录 会议查询 是否参会 反馈详情 讲解思路 会议通知SQL语句分析 反馈详情SQL语句分析 后台代码编写 前端代码编写 效果预览 会议查询 MeetingFeedBack.java package com.zking.oa.model;import org.lisen.mvc.util.AutoIncrement; import org.lisen.mvc.util.…

Ubuntu入门04——目录与文件

目录 1.显示当前工作目录 2.更改目录 3.创建工作目录 4.删除工作目录 5.移动文件或者文件夹 6.文件夹and文件查看命令 7. 回到根目录&#xff0c;回到上一级 8.删除工作目录 9.查看目录和文件 10.以树状图列出目录内容 11.文件查找 12.在数据库中查找文件或目录 1…

从零开始学习数据服务API的最佳指南

随着互联网的快速发展&#xff0c;数据已经成为企业和个人的重要资产。为了更好地利用这些数据&#xff0c;数据服务API&#xff08;Data Service API&#xff09;应运而生。本文将为您介绍如何从零开始学习数据服务API的最佳指南&#xff0c;并推荐一款优秀的产品FDL&#xff…

[C/C++]内存管理,对内存进行操作

目录 一.内存结构 二.内存拷贝函数 三.栈空间与堆空间 四.变量的四种存储类型 五.函数返回值使用指针 六.常见错误总结 &#x1f388;个人主页&#xff1a;北海 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C/C&…

如何让Midjourney角色保持一致的5个核心技巧

hi&#xff0c;同学们&#xff0c;我是赤辰&#xff0c;本期是赤辰第2期AI教程或推荐实用AI工具&#xff0c;文章底部准备了粉丝福利&#xff0c;看完可以领取&#xff01; 今天给大家介绍Midjourney5个控制AI绘画角色一致性的技巧。 近期整理了学员在使用Midjourney生图时遇…

KVM中的四种简单网络模型

KVM中的四种简单网络模型&#xff0c;分别如下&#xff1a; 1、隔离模型&#xff08;QEMU内置的用户模式网络&#xff08;user mode networking&#xff09;&#xff09;&#xff1a;虚拟机之间组建网络&#xff0c;该模式无法与宿主机通信&#xff0c;无法与其他网络通信&…

3D数字孪生技术应用到河道治理的整体方案

无论是城市还是农村的污水处理厂&#xff0c;在建设完毕并稳定运行以后&#xff0c;日常的巡检是最重要的现场管理环节。污水处理由于其自身工艺的特点&#xff0c;污水处理设备众多 &#xff0c;进水水质变化大&#xff0c;处理流程长&#xff0c;这期间需要经常对设备的运行情…

java安全问题处理

一、客户端的计算不可信 1、服务端计算价格&#xff0c;如果不这么做的话&#xff0c;很可能会被黑客利用&#xff0c;商品总价被恶意修改为比较低的价格。 二、客户端提交的参数需要校验 1、误以为客户端的数据来源是服务端&#xff0c;客户端就不可能提交异常数据 2、对参数进…

『PyQt5-Qt Designer篇』| 08 Qt Designer中容器布局和绝对布局的使用

08 Qt Designer中容器布局和绝对布局的使用 1 容器布局1.1 设计容器布局1.2 保存文件并执行2 绝对布局2.1 设计绝对布局2.2 保存文件并执行1 容器布局 1.1 设计容器布局 先拖入一个容器Frame容器,然后拖入几个控件: 把拖入的控件拖入容器中: 选中容器,右键-布局-栅格布局:…

拥抱储能新时代!科士达闪耀EESA第二届中国国际储能展览会

2023年8月30日&#xff0c;EESA第二届中国国际储能展览会在苏州国际博览中心拉开帷幕&#xff0c;科士达以“零碳光储数能未来”为主题&#xff0c;亮相G3-20展台&#xff0c;多维度展现户用光储、工商业储能、大型储能等解决方案&#xff0c;彰显安全、高效、可靠的产品性能和…

Spring源码分析(八)CreateBean与DoCreateBean

写目录 一 CreateBean二 doCreateBean2.1 BeanWrapper2.2 缓存删除2.3 实例化Bean2.3.1 Supplier创建对象2.3.2 工厂创建对象2.3.3 构造器创建实例无参构造构造器依赖注入Setter的依赖注入autowireConstructor实例化instantiateBean 方法 2.4 Bean的前置处理 官网&#xff1a;H…

四川玖璨电子商务有限公司:如何给短视频做运营

短视频已经成为了人们日常生活中的娱乐方式之一。随着短视频平台的兴起&#xff0c;越来越多的人开始尝试在短视频上进行运营&#xff0c;而给短视频配上适合的音乐则是其中一项重要的工作。在本文中&#xff0c;我们将探讨如何给短视频做运营&#xff0c;特别是如何给短视频配…