不重复随机数(Random number without repeating)

2019-06-26 10:24发布

我的NSMutableArray 50的数组元素。 我需要没有任何重复的随机生成。 您能否提供一些示例代码。

Answer 1:

这里是样品获得随机INT低于1000。

int y =  arc4random() % 1000;

留不重复,在插入之前只检查



Answer 2:

创建主阵列的本地副本mutablearray,并获得随机值之后,在随机指标自本地阵列,直到数组数为1除去可用对象,对其进行处理。



Answer 3:

我假设你想生成号码。 这是我用来从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)内存要求。

[资源]



文章来源: Random number without repeating