我想根据百分比
随机生成YES或NO所以我想“滚动”并有25%的几率击中YES,有75%的几率击中NO
希望有人可以指出我在最佳方式上做正确的方向,也许某篇文章还是其他什么?
答案 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%!