Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在彩票系统中平均分配奖品_Php - Fatal编程技术网

Php 在彩票系统中平均分配奖品

Php 在彩票系统中平均分配奖品,php,Php,在“三个人”中平均分配一个数字的最佳方法是什么?例如,假设我有300个,每个人得到100个,但如果我有2个,那么前两个人得到1,而第三个人则不走运。最快的方法是什么?有时这300个数字会高达2000000,我不确定for()循环是否是最好的解决方案?如果您的奖金由p不可分割的单位组成,并且您有W获奖者,那么每个获奖者将获得: P / W 单位 在您支付这些之后,您将 P % W 单位离开。如果这是零,你就完了。如果这是P,则表示您的获奖者多于您的奖品。你必须自己决定那里的行动方针。。。最简单

在“三个人”中平均分配一个数字的最佳方法是什么?例如,假设我有300个,每个人得到100个,但如果我有2个,那么前两个人得到1,而第三个人则不走运。最快的方法是什么?有时这300个数字会高达2000000,我不确定for()循环是否是最好的解决方案?

如果您的奖金由
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 );
}
my@winners=get_list_of_winners();#随机排序或以某种“公平”顺序排序
我的$base_奖品=P/W;#P和W的定义如上所述
my$剩菜=P%W;
对于我的$i(0..$#赢家){
$winners[$i]=$base_prizel+($i<$lefts)?1:0;
}

只需使用基于整数的数学。如果你只有两个奖品要送,三个人要赢,没有人会赢任何东西。如果你有剩余的东西,以至于你的奖品数量不能被获奖者的数量平均分割,那么你就有剩余的东西了。没有公平的方法可以做到这一点,这是基础数学。

我假设你的意思是,你想在三个人之间平均分配剩余的碎片

首先,我将2000000除以3,然后四舍五入。(我们称之为x)
然后将取2000000%(mod)3并找到结果。(我们称之为y)

然后,我将创建一个与您拥有的人数相同的数组。
将每个元素设置为x,然后生成0到x-1之间的y个随机数,并向每个索引添加一个

像这样:

<?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)]++;
}
?>


现在,您有了一个数组,其中的元素数与人的元素数相同,并且每个数组都填充了接收到的大量项目。它可能不是均匀的,但它是公平和随机的。

是的,我试图避免使用“烂摊子基金”式的系统。只要按照第一个彩票中奖者在额外人群中获得第一个DIB的方式进行分配。从他的问题来看,听起来他只是将剩余的部分随机分配给人群。有些人会得到
(P/W)+1
,有些人只会得到
(P/W)
。请确保
P/W
的值。有些语言不计算整数值的小数位数(如Ruby),但PHP确实计算.Perl,但欢迎使用。FWIW,Perl有一些漂亮的小列表模块,可以减少几行代码,但我认为基本代码会更便于移植。