我想隨機生成基於百分比的YES或NO如何獲得25%的機會獲得YES或NO?
所以我要「滾」,並有25%的命中率是,75%的命中率NO
當時希望有人能指出我在正確的方向上做到這一點,最好的方式,也許一些文章或東西?
我想隨機生成基於百分比的YES或NO如何獲得25%的機會獲得YES或NO?
所以我要「滾」,並有25%的命中率是,75%的命中率NO
當時希望有人能指出我在正確的方向上做到這一點,最好的方式,也許一些文章或東西?
所有其他的答案似乎把重點放在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;
}
在僞代碼:
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語句的幫助下,如果命中特定的單個值,輸出將爲'yes',如果命中其他任何一個,則輸出爲'no'。
編輯:
馬克乙說什麼。
您也可以使用數組,例如(1,0,0,0)
或(yes,no,no,no)
。
使用隨機函數具有平等的分配,使之可能象要等於一個可能值
BOOL RollWithDenominator(NSInteger denominator)
{
return 0 == arc4random_uniform(denominator);
}
對於1/4的機率召喚RollWithDenominator(4);
+1使用'arc4random_uniform',它沒有偏差。 – 2013-04-05 21:46:34
既然你是編程對於iOS,您可以直接使用以下代碼:
在您的應用程序開始時調用此函數,這將允許您每次啓動應用程序時都得到不同的結果:
在點srand (time(NULL));
然後在你的代碼,你需要隨機的結果,你使用:
BOOL result = false;
int randomValue = rand()%4;
if(randomValue==0)
{
result = TRUE;
}
變量「結果」是25%,真實,有75%的假!
Objective-C使用'YES/NO'來布爾值而不是'TRUE/false' – 2013-04-05 21:44:08
千萬不要使用rand()和模數。這是有偏見的。 – alecail 2013-04-05 22:08:54
其實客觀C理解兩者! YES/NO和TRUE/FALSE – 2013-04-06 21:13:44
這裏有一個簡單的方法:
BOOL b = arc4random_uniform(4) == 0;
[arc4random_uniform()被推薦用於像arc4random()%upper_bound''這樣的結構,因爲當上限不是二的冪時,它避免了「模偏置」。](http://developer.apple.com/library/mac /#documentation/Darwin/Reference/Manpages/man3/arc4random_uniform.3.html) – 2013-04-05 21:45:30
@ Paul.s非常好的一點。然而,恰恰如此,4是2的冪。 – tybro0103 2013-04-05 21:47:51
這是真的,但想到下一個人來複制你的答案,但不使用兩個冪。這是一個大問題嗎?在大多數情況下可能不會,但最好編寫可複製的示例代碼。 ;) – 2013-04-05 21:50:16
只是一個說明:百分比應該像「56.5」等,不在0.0和1.0之間。 – Jonny 2014-09-05 03:13:27