-4

我需要得到均匀分布的随机数。问题是我每次应用程序开始检查某个 MAX 数字时都需要,然后在从 0 到 MAX 的所有数字上随机进行,而不在同一数字上传递两次(直到向上取整)。

现在我正在使用: arc4random()%maxNumber

但这确实有问题,因为我连续 3 次在同一号码上获得很多回报。

请帮忙。

4

2 回答 2

1

1) 获取随机数

2) While (number is in used set) number = (number + 1) % MAX

3) 将数字添加到已使用的集合中

这是获取唯一随机数的标准算法

于 2012-07-08T01:35:03.153 回答
0

这就是我最终所做的:

-(NSInteger)getNextRandomNumber :(NSInteger)maxNumber{

if (indexSet == nil){
    indexSet = [[NSMutableIndexSet alloc] init];
}
if ([indexSet count] >= maxNumber){
    [indexSet init];
}

NSInteger randomGen = arc4random_uniform(maxNumber);
BOOL foundNumber = FALSE;

while (!foundNumber) {
    if ([indexSet containsIndex:randomGen]){
        randomGen = arc4random_uniform(maxNumber);

    }else{
        [indexSet addIndex:randomGen];
        foundNumber = TRUE;
    }
}

return randomGen;
}

如果您使用它,请注意释放对象,另外,我想我可能会错过一个数字(不确定)在我的情况下没关系,所以......

于 2012-07-08T09:56:18.313 回答