题目:
现有大约1000个左右催收单,需要发给20个左右催收员。每个催收单的金额不同要求对每个催收员分配到的催收单,尽可能的在金额上都比较平均。金额涉及到奖金,不能不公平处理
要求:
写出实现方法、单元测试代码
例如 30 20 30 20 20
分成 2组
1。30 30
2。20 20 20
分成三组
1。30
2。20 20
3。20 30
JAVA算法,求最优平均算法。尽可能平均
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
bibi12526 2017-07-19 09:11关注import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;public class CollectionDebit {
//催缴单费用list static List<Integer> debitList=new ArrayList<Integer>(); //催收员个数 static Integer num=20; //催缴员及对应账单 static Map<Integer,List<Integer>> map=new HashMap<Integer,List<Integer>>(); public static void main(String[] args) { //随机生成催缴单 Random random=new Random(); for(int i=0;i<1000;i++){ debitList.add(random.nextInt(200)); } //把账单按从大到小排序 Collections.sort(debitList,new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { if(o1>o2){ return -1; }else if(o1<o2){ return 1; } return 0; } }); //初始化map List<Integer> list=null; Integer count=num; for(;count>0;count--){ list=new ArrayList<Integer>(); map.put(count, list); } //分配催缴单 divideDebit(debitList,num,true); //打印分配结果 for(Integer key:map.keySet()){ System.out.print("催缴员"+key+"催缴的账单为:"); Integer total=0; for(Integer i:map.get(key)){ total=total+i; System.out.print(i+"-"); } System.out.println("催缴员"+key+"催缴的账单总额为:"+total); } } public static void divideDebit(List<Integer> dList,Integer num,boolean direction){ if(dList.size()>=num){//账单大于人数 for(int i=0;i<num;i++){ Integer index; if(direction){ index=i+1; }else{ index=num-i; } List<Integer> list=map.get(index); list.add(dList.get(i)); map.put(index, list); } //去除已经分配的账单 List<Integer> newDebitList=new ArrayList<Integer>(); for(int i=0;i<dList.size();i++){ if(i>num-1){ newDebitList.add(dList.get(i)); } } // if(newDebitList.size()>0){ //下次分配账单,按反方向分配 divideDebit(newDebitList,num,!direction); } }else if(dList.size()<num){//账单小于人数 for(int i=0;i<dList.size();i++){ List<Integer> list=map.get(i+1); list.add(dList.get(i)); map.put(i+1, list); } } }}
本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 2无用 1