原创

平均分配算法

温馨提示:
本文最后更新于 2022年08月11日,已超过 53 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

业务场景

今天工作中需要将订单平均分配给用户进行处理,最开始想到的是,遍历每个订单,然后分配给每一个用户
用户分配完一轮,然后继续从第一个用户开始分

方法一

public static void main( String[] args ) {
        System.out.println( "Hello World!" );

        int orderCount = 11; // 订单总数
        int personCount = 3; // 人数

        int j = 0; // 控制每个员工
        for (int i = 0; i < orderCount; i++) {
            System.out.println(j + "号员工处理:" + i + "号订单");
            j++; // 下一个员工
            if (j == personCount) {
                j = 0; // 循环一轮重新第一个员工开始
            }
        }
    }

运行结果

file

方法二

写完上面那个方法后,我总感觉还有别的算法可以实现,然后查了一下确实有比较简单的写法
看完别人写的,觉得也并没有很难,可能是没有经常写算法题,思路还是没有打开

public static void main( String[] args ) {
        System.out.println( "Hello World!" );

        int orderCount = 11; // 订单总数
        int personCount = 3; // 人数
        for (int idx = 0; idx < personCount; idx++) {
            // 为每人分配订单
            int start = orderCount * idx/personCount; // 每个人订单的开始位置
            int end = orderCount * (idx+1)/personCount; // 每个人订单结束位置
            for (int i = start; i < end; i++) {
                System.out.println(idx+"号员工处理:"+i+"号订单");
            }
        }
    }

运行结果

file

总结

第一种方法,如果没法平均分的话。最后一个用户会少分到订单
第二种方法,如果没法平均分的话。第一个用户会少分到订单(原因是除的时候向下取整)

正文到此结束
本文目录