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

时间:2013-04-05 21:26:18

标签: objective-c

我想根据百分比

随机生成YES或NO

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

希望有人可以指出我在最佳方式上做正确的方向,也许某篇文章还是其他什么?

6 个答案:

答案 0 :(得分:14)

所有其他答案似乎都集中在YES的百分比为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;
}

答案 1 :(得分:5)

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

BOOL RollWithDenominator(NSInteger denominator)
{
  return 0 == arc4random_uniform(denominator);
}

1/4机会来电RollWithDenominator(4);

答案 2 :(得分:1)

在伪代码中:

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
}

答案 3 :(得分:1)

对不起,可能应该是评论。 我没有太多的IOS经验,但我确信这可以很容易地应用/转移。

一个简单的解决方案是定义具有四个值的某种数组。 然后随机选择此数组中的值。 然后在if / else语句的帮助下,如果它遇到特定的单个值,则输出将为“yes”,如果它击中任何其他三个输出将为“no”。


编辑:
正是Marc B所说的 您还可以使用(1,0,0,0)(yes,no,no,no)等数组。

答案 4 :(得分:0)

这是一个简单的方法:

BOOL b = arc4random_uniform(4) == 0;

答案 5 :(得分:-1)

由于您正在为iOS编程,因此您可以直接使用一些代码:

在应用程序启动时调用它,这样每次启动应用程序时都会得到不同的结果:

srand (time(NULL));

然后在代码中您需要使用随机结果的位置:

BOOL result = false;
int randomValue = rand()%4;
if(randomValue==0)
{
    result = TRUE;
}

变量'result'的真实度为25%,错误率为75%!