我有一个名单。
我想将此列表划分为指定大小的组。所有组都应等于或小于指定的大小,组中的组大小应尽可能相等,并应尽可能接近指定的大小。
什么算法(如果可能,请使用Java风格的伪代码!)确定最合适的组大小?
例如:
列表包含13个名称-最大团队规模为3。输出(团队规模):3,3,3,2,2
列表包含13个名称-最大团队大小为4。输出: 4,3,3,3
列表包含31个名称-最大团队规模为5。输出: 5,5,5,4,4,4,4
列表包含31个名字-最大团队规模为6。输出: 6,5,5,5,5,5
列表包含31个名称-最大团队规模为10。输出: 8,8,8,7
发布于 2012-01-12 22:38:32
这很简单。您计算N div M的结果并添加1以获得正确的数组数量(N是列表长度,M是最大团队大小),然后对所有数组进行迭代以添加一个项,直到耗尽所有项
例如: 43个名字,最大团队编号4 => 43 mod 4+1= 11,仍然是3。所以11个数组(10个4和1个3)
发布于 2012-01-12 22:36:04
我不打算为此编写代码,但是
这显然只适用于接近工作的输入;如果最大团队规模与列表的大小相比很大,那么它就会失败。
发布于 2012-01-12 23:29:15
public class Q {
public static void q(int size, int maxTeamSize) {
int numOfTeams = size / maxTeamSize;
int mod = size % maxTeamSize;
numOfTeams += (mod > 0) ? 1 : 0;
System.out.print("\n(" + size + ":" + maxTeamSize + ")");
for (int i = 0; i < numOfTeams; i++) {
System.out.print(" " + (size / numOfTeams + ((i < mod) ? 1 : 0)));
}
}
public static void main(String[] args) {
q(13, 3);
q(12, 4);
q(31, 5);
q(31, 6);
}
}https://stackoverflow.com/questions/8836710
复制相似问题