如何"滚动"25%的机会获得YES或NO?

kor*_*ben 8 objective-c

我想根据百分比随机生成YES或NO

所以我想"滚动"并有25%的几率击中YES,有75%的几率击中NO

希望有人可以指出我在最佳方式上做正确的方向,也许是一些文章或什么?

rob*_*off 15

所有其他答案似乎都集中在YES的百分比为25%,这是1/4的概率.但是如果百分比是0到100之间的任意整数呢?

BOOL randomBoolWithYesPercentage(int percentage) {
    return arc4random_uniform(100) < percentage;
}
Run Code Online (Sandbox Code Playgroud)

用百分比称呼它,比如randomBoolWithYesPercentage(25).

如果百分比可以是分数,如37.6%怎么办?然后我们需要变得更加复杂.这应该足够了:

BOOL randomBoolWithYesPercentage(double percentage) {
    double r = 100 * (double)arc4random() / ((double)UINT32_MAX + 1);
    return r < percentage;
}
Run Code Online (Sandbox Code Playgroud)


Pau*_*l.s 5

使用具有相等分布的随机函数,并使其尽可能等于其中一个可能的值

BOOL RollWithDenominator(NSInteger denominator)
{
  return 0 == arc4random_uniform(denominator);
}
Run Code Online (Sandbox Code Playgroud)

1/4的机会 RollWithDenominator(4);

  • +1使用`arc4random_uniform`,它是无偏的. (3认同)