-4

一様分布の乱数を取得する必要があります。問題は、アプリが MAX 番号のチェックを開始するたびに必要であり、同じ番号を (切り上げまで) 2 回渡すことなく、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;
}

使用する場合は、オブジェクトの解放に注意してください。また、私の場合は 1 つの数字を逃す可能性があると思います (よくわかりません)。それは問題ではありません...

于 2012-07-08T09:56:18.313 に答える