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

Get random numbers in specific ranges given a 'getrand100()' function

本文关键字:情况下 获取 范围内 随机数 getrand100 函数      更新时间:2023-10-16

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

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

1-20我可以申请:

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

但是我应该为1-200范围做什么?

我建议

1 + getrand100() % 20 

表示第一种情况(20)和

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

c++中:

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

一半的时间它将返回范围在1-100之间的数字(if语句),另一半的时间它将返回范围在101-200之间的数字(else语句)。您也可以(正如在评论中指出的那样)执行任何类似的条件,例如getrand100() <= 50

事实上,你可以这样做来加速你1-20的答案:

return (getrand100() % 20) + 1;

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

使用Java这样做将生成一个所需范围内的randomNumber


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

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

下面是一个广义的拉斯维加斯算法:

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);
  }
}

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上写代码并不容易;)