C:从一系列不同的范围创建随机数

时间:2016-04-28 17:22:19

标签: c random

例如,我有以下3个变量:

N = 5;
int r1 = rand() % N;
int r2 = rand() % N;
int r3 = rand() % N;

如何在该范围内获得3个不同的数字? 我试过这段代码:

do{
  int r1 = rand() % N;
  int r2 = rand() % N;
  int r3 = rand() % N;
}while((r1 == r2) && (r1==r3) && (r2==r3));

但它不起作用。有时一个或两个数字是相同的(例如:1,1,4)。 但我需要他们所有人都不同。我怎么能这样做?

1 个答案:

答案 0 :(得分:4)

此代码将在0..4范围内选择3个不同的数字。它的工作原理是创建一个可用数字数组,每个数据都被选中,它将从列表中删除。这消除了反复尝试满足所有条件不同的低效率 - 这可能从不发生真正的RNG!

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define RANGE   5                   // how many different numbers
#define PICK    3                   // how many to pick

int main(void) {
    int pool[RANGE];
    int size, n, i;
    srand((unsigned)time(NULL));
    for (size=0; size<RANGE; size++) {
        pool[size] = size;          // create number pool
    }

    // pick different numbers
    for(i=0; i<PICK; i++) {
        n = rand() % size;          // random array index
        printf("%d ", pool[n]);     // select number from pool
        pool[n] = pool[--size];     // remove from pool
    }
    printf("\n");
    return 0;
}