发此问题时本人已经过多般思考和编写不能实现理想结果,不是那种点点问题就来问的人`希望知道的
帮下!
例:有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,万分感谢!

JAVA算法
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
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]本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报