为获取随机数,我有一个函数getrand100()
,它返回1-100范围内的随机数。
如何使用相同的功能获取 1-20 和 1-200 范围内的随机数?
对于1-20,我可以申请:
if(num>=1 && num <=20) then accept else reject
但我应该为 1-200 范围做些什么?
答案 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上编写代码并不容易;)