给定'getrand100()'函数获取特定范围内的随机数
Posted
技术标签:
【中文标题】给定\'getrand100()\'函数获取特定范围内的随机数【英文标题】:Get random numbers in specific ranges given a 'getrand100()' function给定'getrand100()'函数获取特定范围内的随机数 【发布时间】:2011-09-17 08:08:40 【问题描述】:为了获取随机数,我有一个函数getrand100()
,它返回一个 1-100 范围内的随机数。
如何使用相同的函数获得介于 1-20 和 1-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() <= 50
。
事实上,您可以通过以下方式加快 1-20 的回答速度:
return (getrand100() % 20) + 1;
这样,您不必一直拒绝超出范围的解决方案。
【讨论】:
@DEVANG 不。我没有添加getrand100() % 2
。我只是用它来分割获得1-100
范围和101-200
范围的概率。正如我所说,您也可以使用getrand100() <= 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:返回特定范围内的矩阵值,范围以元组形式给出(从,到)