所以,我可以想到一些解决方案(例如关注获取随机奇数):
int n;
while (n == 0 || n % 2 == 0) {
n = (arc4random() % 100);
}
Run Code Online (Sandbox Code Playgroud)
哇..对吗?效率不高..
int n = arc4random() % 100);
if (n % 2 == 0) n += 1;
Run Code Online (Sandbox Code Playgroud)
但我不喜欢它总是会增加数量,如果它不奇怪..也许这不应该?另一种方法可能是随机化:
int n = arc4random() % 100);
if (n % 2 == 0) {
if (arc4random() % 2 == 0) {
n += 1;
else {
n -= 1;
}
}
Run Code Online (Sandbox Code Playgroud)
但这对我来说感觉有些尴尬..所以我想知道是否有更好的方法来做这种事情?
生成一个随机数,然后将它乘以2,得到偶数,乘以2加1表示奇数.
一般来说,你想保持这些简单,否则你就有可能搞乱数字的分配.获取典型[0 ... 1)随机数生成器的输出,然后使用函数将其映射到所需范围.
FWIW - 除了第三个之外,看起来你并没有扭曲上面的分布.请注意,除非您使用模数incl进行调整,否则获得99的可能性要小于其他所有其他项.负数.以来..
P(99) = P(first roll = 99) + P(first roll = 100 & second roll = -1) + P(first roll = 98 & second roll = +1)
Run Code Online (Sandbox Code Playgroud)
和 P(first roll = 100) = 0
| 归档时间: |
|
| 查看次数: |
616 次 |
| 最近记录: |