有时,需要的随机数并不是在一个连续的范围内的,而是类似于[a,b]和[c,d]间取值,或者是产生一定数量的不重复的整数。
本文的方法便是建立一定的数组,用rand()产生的数值作为数组的下标,再将所得数据与数组最后一个数值进行交换,然后将rand()的范围上限减1,
比如产生[1,50]间不重复的5个随机数,先产生1个[0,49]随机数n,根据随机数n取出a[n]的数并将之与a[49]相交换,再产生一个[0,48]的随机数,依次类推
# include
# include
# include
# define SWAP(x,y) (x)=(x)+(y);(y)=(x)-(y);(x)=(x)-(y)
int main()
{
int num_rand = 5;
int nRand[5];
int num_sum = 50;
int num[50];
int k = 0;
int num_begin = 1;
int num_end = 50;
for(int i=0;i
但使用上述方法会使函数有一定的局限性,故本文需要使用动态分配的内存来提高函数的随机性。
# include
# include