目标:
假设我在水果种植园有 X 个工人。他们在种植园种植苹果、梨和葡萄。
在一天结束时,工头按比例对每个工人进行评分。所有比率的总和为 100。该比率用于确定如何在一天结束时在工人之间分配水果。
我如何在所有工人之间分配水果,以便他们每个人都能得到公平的份额(在一定的随机性内考虑整数除法)。只有整个水果被分割,所以整数结果。所有的水果都必须分发出去。
我和大约 20 名工人一起做这个,所以现在这个比例大约是每名工人 0.05。
我试过的(伪代码):
for each worker:
if applesGiven < appleStock:
worker.give(ratio * applestock);
if pearsGiven < pearStock:
worker.give(ratio * pearStock);
if grapesGiven < grapeStock:
worker.give(ratio * grapeStock);
我会让他们给出的 [fruit] 的确切数量由一个boolean Roundup
用随机布尔值初始化并在处理完每个水果后切换的 a 确定。
我尝试过的(完整代码):
public void balance() {
boolean roundUp = random.nextBoolean();
for (Employee e : employees) {
double ratio = e.getRatio();
if (applePlanned < appleNeeded) {
int apple;
if (roundUp) {
apple = (int) Math.ceil(ratio * appleNeeded);
} else {
apple = (int) Math.floor(ratio * appleNeeded);
}
e.setrapple(apple);
applePlanned += apple;
roundUp = !roundUp;
}
if (pearPlanned < pearNeeded) {
int pear;
if (roundUp) {
pear = (int) Math.ceil(ratio * pearNeeded);
} else {
pear = (int) Math.floor(ratio * pearNeeded);
}
e.setrpear(pear);
pearPlanned += pear;
roundUp = !roundUp;
}
if (grapePlanned < grapeNeeded) {
int grape;
if (roundUp) {
grape = (int) Math.ceil(ratio * grapeNeeded);
} else {
grape = (int) Math.floor(ratio * grapeNeeded);
}
e.setrgrape(grape);
grapePlanned += grape;
roundUp = !roundUp;
}
}
我遇到的问题:
- 只有大约 3/4 的物品被分发
- 当我有偶数个水果时,布尔值在每个新人开始时获得相同的值。
感谢您对此进行调查!
请用java、python或伪代码回答,这就是我能读到的。