平均分配算法
温馨提示:
本文最后更新于 2022年08月11日,已超过 847 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
业务场景
今天工作中需要将订单平均分配给用户进行处理,最开始想到的是,遍历每个订单,然后分配给每一个用户
用户分配完一轮,然后继续从第一个用户开始分
方法一
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; // 循环一轮重新第一个员工开始
}
}
}
运行结果
方法二
写完上面那个方法后,我总感觉还有别的算法可以实现,然后查了一下确实有比较简单的写法
看完别人写的,觉得也并没有很难,可能是没有经常写算法题,思路还是没有打开
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+"号订单");
}
}
}
运行结果
总结
第一种方法,如果没法平均分的话。最后一个用户会少分到订单
第二种方法,如果没法平均分的话。第一个用户会少分到订单(原因是除的时候向下取整)
正文到此结束
- 本文标签: 算法 Java
- 本文链接: https://www.it1997.com/article/101
- 版权声明: 本文由小陈没烦恼原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权