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

时间:2011-09-17 08:08:40

标签: java c++ c algorithm

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

如何使用相同的功能获取 1-20 1-200 范围内的随机数?

对于1-20,我可以申请:

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

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

5 个答案:

答案 0 :(得分:5)

在c ++中:

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

一半时间它将返回1-100范围内的数字(if语句),另一半时间它将返回101-200范围内的数字({{1}声明)。您也可以(如评论中所指出的)执行任何类似的条件,例如else

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

getrand100() <= 50

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

答案 1 :(得分:5)

我会建议

1 + getrand100() % 20 

表示第一种情况(20)和

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

为后者(200)。

答案 2 :(得分:1)

以下是广义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);
  }
}

答案 3 :(得分: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)

答案 4 :(得分:1)

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