在给定'getrand100()'函数的情况下获取特定范围内的随机数
Get random numbers in specific ranges given a 'getrand100()' function
对于获取随机数,我有一个函数getrand100()
,它返回1-100范围内的随机数。
如何使用相同的函数获得1-20和1-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上写代码并不容易;)
相关文章:
- 如何在没有实例的情况下获取非静态方法的类型?
- 如何在不等待检索的情况下获取C++中的内存位置?
- 如何在不为其声明变量的情况下获取和使用常量值的地址?
- 在不使用模板的情况下获取 std::array 引用
- 在确定有实现的情况下获取HTTP 501未实现
- 如何将左值传递给函数,仅在没有模板的情况下获取右值
- 如何在不创建实例的情况下获取类的方法成员的类型?
- 如何在不包含 Windows.h 的情况下获取 IsDebuggerPresent 的声明
- <int> 在不破坏堆栈的情况下获取 C++ 中的堆栈总和
- 如何在不引起实例化的情况下获取功能模板的签名
- 如何在不定义其他 fonction getValue() 的情况下获取私有值
- 如何在不获取所有html的情况下获取QTextEdit的html标签?
- 在不发送任何内容的情况下获取功能的返回
- LDAP函数中是否有任何功能可以在不使用ldap_search的情况下获取用户信息
- 如何在不使用QMediaPlayer的情况下获取Qt中音频和视频文件的持续时间
- 我可以在不声明变量类型的情况下获取输入,或者在 c++ 中为同一变量声明多个类型吗?
- 处理POSIX信号:如何在不使用BackTrace_symbols的情况下获取堆栈跟踪
- 在不知道的情况下获取地图的钥匙
- 在不暂停贪吃蛇游戏的情况下获取输入
- 修复错误:在不更改代码的情况下获取临时地址