50 個の配列要素を持つ NSMutableArray があります。繰り返しなしでランダムに生成する必要があります。いくつかのサンプルコードを提案できますか?
質問する
159 次
3 に答える
1
メイン配列のローカル mutablearray コピーを作成し、ランダム値を取得した後、ランダム インデックスで使用可能なオブジェクトをローカル配列から削除し、配列カウントが 1 になるまで処理します。
于 2012-07-20T12:05:38.747 に答える
0
数値を生成する必要があると想定しています。これは、N から M 個の乱数を生成するために使用した答えです。乱数を に追加するわけではありませんがNSMutableArray
、必要に応じてこのコードを適応させることができると確信しています。
#define M 10
#define N 100
unsigned char is_used[N] = { 0 }; /* flags */
int in, im;
im = 0;
for (in = N - M; in < N && im < M; ++in) {
int r = rand() % (in + 1); /* generate a random number 'r' */
if (is_used[r])
/* we already have 'r' */
r = in; /* use 'in' instead of the generated number */
assert(!is_used[r]);
vektor[im++] = r + 1; /* +1 since your range begins from 1 */
is_used[r] = 1;
}
assert(im == M);
上記が機能する理由はすぐにはわかりません。しかし、それは機能します。[1..N] の範囲から正確に M 個の数値が一様分布で選択されます。
大きな N の場合、検索ベースの構造を使用して「既に使用されている」数値を格納できるため、O(M) メモリ要件で優れた O(M log M) アルゴリズムを取得できることに注意してください。
于 2012-07-20T12:04:12.310 に答える
0
これは、1000 未満のランダムな int を取得するサンプルです。
int y = arc4random() % 1000;
重複しないようにするには、挿入する前に確認してください
于 2012-07-20T12:05:39.420 に答える