目標:
果樹園に X 人の労働者がいるとします。プランテーションでは、リンゴ、ナシ、ブドウを栽培しています。
一日の終わりに、職長は各労働者を比率で等級付けします。すべての比率の合計は 100 です。比率は、1 日の終わりに労働者の間で果物を分配する方法を決定するためにあります。
すべてのワーカー間で果物を分配して、それぞれが公平に分配されるようにするにはどうすればよいですか (整数除算を考慮して特定のランダム性内で)。果物全体のみが分割されるため、整数の結果が得られます。そして、すべての果物を配らなければなりません。
私は約 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);
[果物] の正確な数は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、または疑似コードで回答してください。それが私が読むことができるものです。