ras_123123 2010-04-13 09:49
浏览 267
已采纳

JAVA算法

发此问题时本人已经过多般思考和编写不能实现理想结果,不是那种点点问题就来问的人`希望知道的
帮下!
例:有4个任务分配a,b,c三个人a现有11个任务,b现有2个任务,c有3个任务,如何分配最平均但又不能低于
现在有任务,结果最终为a=11,b=4,c=5或a=11,b=5,c=4都行。
有30个任务分配啊a现有2,b现有2,c现有10分配结果最终 a=14 b=15 c=15或a=15 b=15 = c14等。
现在这样是写死了的·要求需分配任务不确定,要分配的人不确定来自于数据库某张表的所有行。
现有任务是表里某行所对应的字段。用JAVA或存储过程能实现就行,可以把代码写死,但改动数据也能成功
写不下的话发我邮箱ras_12312312@163.com,万分感谢!

  • 写回答

2条回答 默认 最新

  • Alucard-阿卡多 2010-04-14 14:44
    关注

    [color=red]task方法是实现方法,taskList内的值是你数据库里取出的任务记录,你数据库取时加一下排序,list里的值是从小到大。taskCount是待分配任务总数,代码写的不怎么规范,就是为了实现功能而已。
    [/color]
    [code="java"]

    public static List task(List taskList,Integer taskCount){
    for(int i=1;i int temp;
    temp =(taskList.get(i)-taskList.get(i-1))*i;
    if(taskCount/temp != 0){
    a(taskList,i,temp);
    }else{
    a(taskList,i,taskCount);
    taskCount = taskCount -temp;
    break;
    }
    taskCount = taskCount -temp;
    if(taskCount break;
    }
    }
    if(taskCount>0){
    a(taskList,taskList.size(),taskCount);
    }
    return taskList;

    }
    public static boolean a(List taskList,int k,int temp){
    boolean res = false;
    for(int i=0;i taskList.set(i, taskList.get(i)+temp/k);
    }
    if(temp/k == 0){
    for(int j=0;j taskList.set(j, taskList.get(j)+1);
    res =true;
    }
    }
    if(temp>k){
    for(int j=0;j<temp%k;j++){
    taskList.set(j, taskList.get(j)+1);
    res =true;
    }
    }
    return res;
    }
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 yolov8边框坐标
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂