我想根据百分比随机生成是或否
所以我想“滚动”并有 25% 的机会命中 YES,有 75% 的机会命中 NO
希望有人能指出我正确的方向,以最好的方式做到这一点,也许是一些文章之类的?
我想根据百分比随机生成是或否
所以我想“滚动”并有 25% 的机会命中 YES,有 75% 的机会命中 NO
希望有人能指出我正确的方向,以最好的方式做到这一点,也许是一些文章之类的?
所有其他答案似乎都集中在“是”的百分比为 25%,即 1/4 的概率上。但是如果百分比是 0 到 100 之间的任意整数呢?
BOOL randomBoolWithYesPercentage(int percentage) {
return arc4random_uniform(100) < percentage;
}
用百分比来称呼它,比如randomBoolWithYesPercentage(25)
.
如果百分比可以是小数,比如 37.6%,该怎么办?然后我们需要变得更复杂。这应该足够了:
BOOL randomBoolWithYesPercentage(double percentage) {
double r = 100 * (double)arc4random() / ((double)UINT32_MAX + 1);
return r < percentage;
}
使用具有相等分布的随机函数,并使其尽可能等于可能值之一
BOOL RollWithDenominator(NSInteger denominator)
{
return 0 == arc4random_uniform(denominator);
}
对于 1/4 的机会电话RollWithDenominator(4);
在伪代码中:
x = rand(1,4);
if (rand == 1) {
'yes' // 25% of the time you get 1
} else {
'no'; // the other 75%, when you get 2,3,4
}
对不起,可能应该是一个评论。我没有太多的 IOS 经验,但我相信这可以很容易地应用/转移。
一个简单的解决方案是定义某种具有四个值的数组。然后在这个数组中随机选择一个值。然后在 if/else 语句的帮助下,如果它命中一个特定的单值输出将为“是”,如果它命中其他三个输出中的任何一个,则为“否”。
编辑:
正是 Marc B 所说的。
您还可以使用数组,例如(1,0,0,0)
or (yes,no,no,no)
。
这是一个简单的方法:
BOOL b = arc4random_uniform(4) == 0;
由于您正在为 iOS 编程,这里有一些您可以直接使用的代码:
在您的应用程序开始时调用它,这将使您每次启动应用程序时都有不同的结果:
srand (time(NULL));
然后在代码中需要使用随机结果的地方:
BOOL result = false;
int randomValue = rand()%4;
if(randomValue==0)
{
result = TRUE;
}
变量“结果”的正确率为 25%,错误率为 75%!