0

在 PHP 中,如果我用传送带构建一个工厂检查程序,其中表单上的弹出列表框是 100%(什么都不检查 - 让所有内容都通过)到 0%(检查所有内容),当一个的小部件应进行检查?

一些额外的信息——标签上写着“让 [x%] 小部件在没有检查的情况下通过”。

不仅如此,我们如何测试你的算法来证明它是正确的?例如,值为 100%,运行 99999 次,应该显示没有检查。99% 的值,运行 99999 次,如果重复运行,可能会显示一次检查。0% 的值,运行 99999 次,应该显示所有 99999 个小部件被发送到检查。

编辑:一位同事说我在这里混淆了赔率和概率。她认为我在描述概率?

无论如何,我尝试了这段代码作为测试,但除了 100 和 50 到 1 分之外它什么也没做。但是,1-49 的行为类似于 50,而 51 到 100 的行为类似于 100。

<?php

$nChance = @ $argv[1];
$nChance = intval($nChance);

for ($i = 1; $i <= 999999; $i++) {
  $nTest = rand(1,floor(100/$nChance));
  if (!($nTest == 1)) {
    die("INSPECT! i($i) rand($nTest) chance($nChance)\n");
  }
}

然后我尝试了这种变化,但也失败了,因为它只是一直说 INSPECT。

<?php

$nChance = @ $argv[1];
$nChance = intval($nChance);

for ($i = 1; $i <= 999999; $i++) {
  $nTest = rand(0,100);
  if (!($nTest < $nChance)) {
    die("INSPECT! i($i) rand($nTest) chance($nChance)\n");
  }
}
4

1 回答 1

1
$nChance = 5; // % chance of inspection
$x       = 1; // number of seconds between products passing inspection point
while ( isLineRunning() )
{
    if( mt_rand(1,100) <= $nChance )
    {
        echo "INSPECT ITEM!";
    }
    sleep( $x );
};

这将在线路运行时每隔“x”秒检查一次。

您的同事是正确的,但出于您的目的,您正在根据随机数是否小于或等于(在这种情况下)5 做出决定,如果是真正随机的(不是这样生成的)应该提供 1在 20 机会中,您选择任何给定的项目。

于 2012-05-02T11:37:30.060 回答