记一次拆分包裹的算法

简介: 由于公司销售的商品从生产厂家拿过来的时候都是成箱装的,规格如下:大包装50个,中包装30个,小包装10个。而用户购买的时候,数量可能是70个、60个或5个这种数据 ,于是就有了拆包的需求。 首先我们要怎么拆才能尽量避免不拆箱呢?原则上来讲,优先计算大包装,最后小包装,也就是说,从大到小的去拆包。

     由于公司销售的商品从生产厂家拿过来的时候都是成箱装的,规格如下:大包装50个,中包装30个,小包装10个。而用户购买的时候,数量可能是70个、60个或5个这种数据 ,于是就有了拆包的需求。

首先我们要怎么拆才能尽量避免不拆箱呢?原则上来讲,优先计算大包装,最后小包装,也就是说,从大到小的去拆包。

例如用户购买了80个,可以拆为50*1+30*1+10*0 ,如果用户购买的数量是62个呢?则可以拆成50*1+30*0+10*1+1*2。

了解怎么拆之后,就开始写代码咯,从上面的分析中,我们可以看出来,实际上的算法,就是用:(购买数量-(购买数量%包装单位))/ 包装单位 ,直到包装装位为1为止,

下面不废话了,直接写核心代码:

public class Main {

    static List<Integer> unitList;

    static {
        unitList = new ArrayList();
        unitList.add(1);
        unitList.add(10);
        unitList.add(30);
        unitList.add(50);
    }

    public static void main(String[] args) {
    
        unitList.sort(Comparator.reverseOrder());

     	
        splitPack(62, unitList);
       
    }


    public static void splitPack(int count, List<Integer> list) {

        Map<Integer, Integer> map = new LinkedHashMap<>();

        for (Integer currentUnit : list) {
            if (count % currentUnit == 0) {
                map.put(currentUnit, count / currentUnit);
                break;
            } else {
                int packageCount = (count - (count % currentUnit)) / currentUnit;
                map.put(currentUnit, packageCount);
                count = count - currentUnit * packageCount;
            }
        }


        map.entrySet().forEach(x -> System.out.println(x.getKey() + "=" + x.getValue()));
    }
}

输出结果:

50=1
30=0
10=1
1=2

即50个一箱的,有1个,30个一箱的有0个,10个一箱的有1个,单个包装的有2个。

 

目录
相关文章
|
3月前
|
算法 Java C++
试题 算法训练 整数拆分
试题 算法训练 整数拆分
37 0
|
3月前
|
算法 JavaScript
|
3月前
|
存储 自然语言处理 算法
☆打卡算法☆LeetCode 140. 单词拆分 II 算法解析
☆打卡算法☆LeetCode 140. 单词拆分 II 算法解析
|
3月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 139. 单词拆分 算法解析
☆打卡算法☆LeetCode 139. 单词拆分 算法解析
|
9月前
|
算法
代码随想录算法训练营第四十六天 | LeetCode 139. 单词拆分、多重背包、背包总结
代码随想录算法训练营第四十六天 | LeetCode 139. 单词拆分、多重背包、背包总结
64 1
|
12月前
|
算法
算法练习Day46|139.单词拆分
算法练习Day46|139.单词拆分
|
人工智能 算法 Java
LeetCode 算法 | 如何拆分数组?
LeetCode 算法 | 如何拆分数组?
|
机器学习/深度学习 算法 Python
数学建模国赛:python机器学习基础之训练集和测试集拆分、算法精确率评估
数学建模国赛:python机器学习基础之训练集和测试集拆分、算法精确率评估
189 0
数学建模国赛:python机器学习基础之训练集和测试集拆分、算法精确率评估
|
机器学习/深度学习 人工智能 算法
KNN 算法-数据集拆分|学习笔记
快速学习 KNN 算法-数据集拆分
167 0
|
存储 监控 算法
【高并发项目实战】自适应高并发复杂场景的订单拆分算法工具
​本篇文章带你打造一个自适应场景的交易订单合单拆分通用算法方案,根据现有技术的痛点,我们支付的时候设计一种自适应场景的交易下单合单拆分通用算法的方案,可插拔的场景组件提升扩展性和通用性就很重要。

热门文章

最新文章