【问题标题】:How to choose 1 random number from 2 different number ranges?如何从 2 个不同的数字范围中选择 1 个随机数?
【发布时间】:2012-04-22 21:58:28
【问题描述】:

我需要得到一个介于两者之间的随机数

0 - 80

120 - 200

我可以的

$n1 = rand(0, 80);
$n2 = rand(120, 200);

但是我需要在n1n2 之间进行选择。做不到

 $n3 = rand($n1, $n2)

因为这可能会给我一个介于80 - 120 之间的数字,我需要避免。

如何解决?

【问题讨论】:

  • 在问题的开头,您指定了1-80 的范围,但代码反映了0-80 的范围。你的意思是什么?

标签: php random


【解决方案1】:

由于两个范围的大小不同(即使只有 1 个数字),为了确保良好的随机分布,您需要这样做:

$random = rand( 0, 200 - 39 );
if ($random>=120-39) $random+=39;

最快的方法。 :)

它的工作方式是假装它是一个范围,如果它最终选择了一个高于第一个范围的数字,我们会增加它以适应第二个范围。这确保了完美的传播。

【讨论】:

  • 他解决了这个问题,两者的范围相同,都是 81(0-80 和 120-200)
  • 同意 2 次随机调用比一次慢,但是您的实现使第二个程序员更难遵循代码,并且好处可能只有 50-100 毫秒?这对我来说并没有超过成本:P
  • Np。当然,还有其他方法可以做到这一点,但无论 2 个范围如何,这一保证都能很好地传播。 :)
【解决方案2】:

由于两个范围的大小相同,您可以简单地使用rand(0, 1) 来确定要使用的范围。

$n = rand(0, 1) ? rand(0, 80) : rand(120, 200);

【讨论】:

  • @ThiefMaster 和since both ranges have the same size 的意思是选择这两个范围中任何一个数字的几率是相同的,因为它的 50% / 范围大小对吗?
  • 不正确。它不会是均匀随机的,因为间隔较短的数字更有可能被接受。虽然这可能是正确的,因为跨度在两者中都是 80,但通常情况并非如此。
  • 同样,跨度在两个范围内都不是 80。 200-120 = 80, 80 - 1 = 79, 一个比另一个小。
  • 根据最近的编辑,范围大小相同。
  • 这个答案不是未来的证明,因为如果在某些时候范围是(或可能是,如用户指定的)不同的大小,则必须重新实现它。
【解决方案3】:

PHP为此提供了一个新功能,也称为范围。非常好用,可以在 PHP 手册中找到。

它允许你输入一个最小/最大数字来获取一个范围。

<?php
echo range(0, 1000);
?

但从技术上讲,您也可以输入自己的两个数字作为数字范围。

【讨论】:

    【解决方案4】:

    得到两个随机数$n1$n2

    $n1 = rand(0, 80);
    $n2 = rand(120, 200);

    定义名为 $n3

    的新数组
    $n3=array();

    $n1$n2 添加到数组 $n3 使用 array_push() 函数

    array_push($n3,$n1,$n2);

    使用 array_rand() 函数从数组 $n3 中找到随机索引 $find_index

    $find_index=array_rand($n3,1);

    显示结果

    回声 $n3[$find_index];

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      • 1970-01-01
      • 2019-07-17
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      相关资源
      最近更新 更多