8

我想根据百分比随机生成是或否

所以我想“滚动”并有 25% 的机会命中 YES,有 75% 的机会命中 NO

希望有人能指出我正确的方向,以最好的方式做到这一点,也许是一些文章之类的?

4

6 回答 6

15

所有其他答案似乎都集中在“是”的百分比为 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;
}
于 2013-04-05T21:54:16.100 回答
5

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

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

对于 1/4 的机会电话RollWithDenominator(4);

于 2013-04-05T21:39:39.950 回答
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
}
于 2013-04-05T21:28:18.050 回答
1

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

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


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

于 2013-04-05T21:32:34.590 回答
0

这是一个简单的方法:

BOOL b = arc4random_uniform(4) == 0;
于 2013-04-05T21:43:18.963 回答
-1

由于您正在为 iOS 编程,这里有一些您可以直接使用的代码:

在您的应用程序开始时调用它,这将使您每次启动应用程序时都有不同的结果:

srand (time(NULL));

然后在代码中需要使用随机结果的地方:

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

变量“结果”的正确率为 25%,错误率为 75%!

于 2013-04-05T21:42:26.053 回答