例如,我有以下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)。 但我需要他们所有人都不同。我怎么能这样做?
答案 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;
}