我无法找到这个确切问题的答案:
鉴于n
个n
个对象至少为2的整数,我需要在p
组之间平均分配p
n
大于或等于2且{{} 1}}大于或等于p
,其中,'同等',我的意思是:每组包含q
个成员; q
至少1.组成员的数量决定了组的“权重”,因为n
对象应该分布,以便更大的组(即更多的成员)获得更多的对象。但是,每个组必须至少接收一个对象。
示例:给定n=5
个对象以及两个组p_1
和p_2
q_1=1
和q_2=9
,p_1
获取1个对象和{{ 1}} 4。
答案 0 :(得分:0)
首先,没有要求每个组必须至少有一个对象:
统一绘制1到sum(q_n)=q_1+q_2+...+q_n
如果整数介于sum(q_i)
和sum(q_{i+1})
之间,则将一个对象添加到组i
。
现在要确保每个组都有一个对象,只需向每个组添加一个对象(它不会改变加权分布)。
答案 1 :(得分:0)
你的问题不是很清楚。你可能想要这个:
// add 1 to each group and subtract from n
for (int i = 0; i < p; ++i)
group[i] = 1;
n -= p;
while (n > 0)
{
// find i, such that q[i] / group[i] is maximum
int imax = 0;
double max = q[0] / group[0];
for (int i = 1; i < p; ++i)
{
if (q[i] / group[i] > max)
{
max = q[i] / group[i];
imax = i;
}
}
++group[imax];
--n;
}