给定'getrand100()'函数获取特定范围内的随机数

Posted

技术标签:

【中文标题】给定\'getrand100()\'函数获取特定范围内的随机数【英文标题】:Get random numbers in specific ranges given a 'getrand100()' function给定'getrand100()'函数获取特定范围内的随机数 【发布时间】:2011-09-17 08:08:40 【问题描述】:

为了获取随机数,我有一个函数getrand100(),它返回一个 1-100 范围内的随机数。

如何使用相同的函数获得介于 1-201-200 之间的随机数?

1-20岁我可以申请:

if(num>=1 && num <=20) then accept else reject

但是对于 1-200 范围我应该怎么做呢?

【问题讨论】:

删除了“-1”。虽然 1-20 的问题非常简单,但 1-200 涵盖了更普遍的问题,即通过使用分辨率 Y 的随机源(其中 X > Y)来制作具有给定分辨率 X 的良好随机发生器。不是那么简单,我的意见。 【参考方案1】:

我会提议

1 + getrand100() % 20 

对于第一种情况 (20) 和

(getrand100()%2)*100 + getrand100()

对于后者 (200)。

【讨论】:

【参考方案2】:

在 C++ 中:

if (getrand100() % 2) return getrand100();
else return getrand100() + 100;

一半时间它会返回一个 1-100 范围内的数字(if 语句),另一半时间它将返回一个 101-200 范围内的数字(else 语句)。您还可以(如 cmets 中指出的那样)执行任何类似的条件,例如 getrand100() &lt;= 50

事实上,您可以通过以下方式加快 1-20 的回答速度:

return (getrand100() % 20) + 1;

这样,您不必一直拒绝超出范围的解决方案。

【讨论】:

@DEVANG 不。我没有添加getrand100() % 2。我只是用它来分割获得1-100 范围和101-200 范围的概率。正如我所说,您也可以使用getrand100() &lt;= 50 之类的东西来代替getrand100() % 2 是的,这是我的错误,但你的回答很好,现在我明白了【参考方案3】:

使用Java 这样的东西会在所需范围内生成一个随机数。


int maxLimit=85;
Double someNumber = Math.random()*maxLimit;
int randomNumber=random.intValue(); // return a number from 1 to 85

在您的情况下,您可以简单地将方法结果除以 100,然后乘以 maxLimit(20 或 200)

【讨论】:

【参考方案4】:

以下是泛化的Las Vegas-Algorithm:

getRand(int upperBound)
  if (upperBound <= 1)  throw new IllegalArgumentException(); 
  // TODO: If random set should not start at 1, use another parameter as offset
  if (upperBound <= 50) 
    int num = getRand100();
    while (num > 100 - 100 % upperBound) 
      num = getRand100();
      
    return num % upperBound + 1;
   else if (upperBound <= 100) 
    int num = getRand100();
    while (num > upperBound) 
      num = getRand100();
      
    return num;
   else  
    return getRand(upperBound / 100) * 100 - 100 + getRand(upperBound % 100);
  

【讨论】:

【参考方案5】:

Java 中的通用解决方案。

 public static int rand(int min, int max) 
    int range = max - min + 1;
    int num = 1;
    do 
          num = num * 100 + getrand100();
     while (num <= range);
    return min + num % range;
 

顺便说一句,在 iPhone 上编写代码并不容易 ;)

【讨论】:

以上是关于给定'getrand100()'函数获取特定范围内的随机数的主要内容,如果未能解决你的问题,请参考以下文章

Python:返回特定范围内的矩阵值,范围以元组形式给出(从,到)

当经纬度为已知点时计算100米距离

C语言 回调函数 produce(arr,len,getRand)

在特定日期范围内获取结果[关闭]

如何从单个表中对多行进行分组并获取给定范围内的所有记录

获取特定范围/半径内的所有行(文档术语矩阵)