什么是在“三个人”中均匀分配数字的最佳方式?例如,假设我有300个东西,每个人得到100但是如果我有2个东西,那么前两个人得到1,而第三个人失去运气。最快的方法是什么?有时300数字将高达2,000,000,我不确定for()循环是否是最佳解决方案?
答案 0 :(得分: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 );
}
答案 1 :(得分:2)
我假设你的意思是你想在三个人之间平均分配剩余的部分。
首先,我将2,000,000除以3并向下舍入。 (我们称之为x)
然后需要2,000,000%(mod)3并找到结果。 (我们称之为y)
然后我会根据你拥有的人数创建一个数组 将每个元素设置为 x ,然后在0和 x-1 之间生成 y 随机数,并为每个索引添加一个< / p>
像这样:
<?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)]++;
}
?>
现在你有一个数组与人数相同的数组,每个数组都填充了一些收到的项目。它可能不是偶数,但它是公平和随机的。
答案 2 :(得分:-1)
只需使用基于整数的数学运算。如果你只有两个奖品可以放弃,三个人可以获胜,没有人能赢得任何奖励。如果你遗留了任何东西,以至于你的奖品数量不能被获胜者的数量整除,那么你只剩下剩下的东西了。没有公平的方法,这是基本的数学。