在「三個人」中均勻分配數字的最佳方式是什麼?比如讓我們說我有300個東西,每個人得到100個,但是如果我有2個東西,那麼前兩個人得到1個,而第三個人是不幸的。什麼是最快的方式來做到這一點?有時候這300個數字會高達2,000,000,我不確定for()循環是否是最好的解決方案?在彩票系統中均勻分發獎品
2
A
回答
3
如果您的獎金是由P
不可分割的單位,你有W
贏家,那麼每位獲獎者將獲得:
P/W
單位。
你已經支付了這些,你將不得不離開
P % W
單位。如果這是零,你就完成了。如果這是P
這意味着你有更多的獲勝者比你有獎品。你必須決定採取有自己的過程......最簡單的解決辦法是從存儲這樣的場合有些行賄基金借鑑
P - W
。
如果餘數爲0或P
其他的東西,那麼你必須自己決定什麼是最公平的事情做的是...也許開始一個賄賂基金....
編輯
發表意見之後,這樣你可以避免行賄基金:
my @winners = get_list_of_winners(); # Sorted randomly or in some 'fair' order
my $base_prize = P/W; # P and W defined as above
my $leftovers = P % W;
for my $i (0 .. $#winners) {
$winners[$i] = $base_prizel + (($i < $leftovers)?1:0);
}
0
只要使用基於整數的數學。如果你只有兩個獎項可以放棄,三個人可以取勝,沒有人會贏得任何獎品。如果你有什麼遺漏,使得你的獎品數量不能被贏家數量整除,那麼你只剩下剩下的東西。沒有公平的做法,這是基本的數學。
2
我假設你的意思是你想在三個人中均勻分配剩餘的部分。
首先我會將2,000,000除以3並舍入。 (我們稱之爲x)
然後會花費2,000,000%(mod)3並找到結果。 (我們稱之爲y)
然後我會創建一個數組大小的人數你有。
設置每個元素X然後生成y和0之間隨機數X-1,並添加一個到每個指標的
像這樣:
<?php
$items = 2000000;
$winners = 3;
$x = floor($items/$winners);
$y = $item % $winners;
$distribution = $array();
$distribution = array_fill(0, $winners, $x);
for($i = 0; $i < $y; $i++)
{
$distribution[rand(0, $winners - 1)]++;
}
?>
現在你有一個元素數量與人數相同的數組,每個數組都填充了一些收到的項目。它可能不是平均的,但它是公平的和隨機的。
相關問題
- 1. 算法均勻分配「獎品」/無方差彩票
- 2. 彩票系統鍋部
- 3. 使用SQL檢查彩票中獎彩票
- 4. 如何在彩票系統中隨機選擇不同數量的獎品,android/java
- 5. 五彩/非均勻漸變
- 6. 投票系統的用戶獎/褒獎/信譽算法
- 7. 彩票獲獎機會蟒蛇
- 8. 分發按鈕DIV均勻
- 9. 均勻分發li物品,絕對寬度
- 10. 製作均勻的彩色位圖
- 11. PRNG均勻分佈
- 12. Java彩票分類
- 13. 算法:如何均勻分佈不同的綵球?
- 14. 自動彩票邏輯:如何爲已知數量的3種可能的獎品選擇獲獎者
- 15. 將非均勻分佈轉化爲均勻分佈
- 16. 在投票系統
- 17. PHP平均評分系統
- 18. 幸運抽獎系統
- 19. 什麼是感知上均勻的色彩空間以及LAB色彩空間是如何感知均勻的?
- 20. vb.net中的發票計費系統
- 21. 它控制在發票系統
- 22. 在ggplot2中水平均勻分佈點
- 23. 在Xcode中均勻分佈按鈕
- 24. 如何在GridView中均勻分隔GridViewColumns?
- 25. 如何在CSS中均勻分佈?
- 26. Powerpoint VBA - 均勻分佈列
- 27. 均勻分配菜單
- 28. 隨機均勻分佈
- 29. 均勻分佈矩形
- 30. 按天分配行均勻
正確的我試圖避免融資基金類型的系統。只需按照第一個彩票贏家獲得額外彩票中的第一張彩票的方式進行分配。 – user766987 2011-05-30 16:28:48
從他的問題來看,這聽起來好像他只是隨機分配剩下的人。有些人會得到(P/W)+ 1,有些人只會得到(P/W)。 – Jonah 2011-05-30 16:29:04
確保['floor()'](http://php.net/floor)是'P/W'的值。有些語言不會計算整數值的小數位(比如Ruby),但是PHP可以。 – Jonah 2011-05-30 16:29:54