在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");
}
}
答案 0 :(得分: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作出决定,如果真正随机(它不是这样产生的话)应该在您选择任何给定项目时提供20%的机会。