#include<iostream>
#include <ctime>
#include <cassert>
using namespace std;
int random_int(int m, int n); //返回[m,n)之间的随机整数
void random_int_K(int n, int k, int *pResult);//生成[0,n)之间不重复的k个随机数
int main(void)
{
/ Test code //
//srand((unsigned)time(NULL));
//for(int i =0; i < 10; ++i)
//{
// cout << random_int(3,6) << endl;
//}
int n = 100;
int k = 5;
int *result = new int [k];
//srand((unsigned)time(NULL));
random_int_K(n,k,result);
for(int i = 0 ; i < k; ++i)
{
cout << result[i] << endl;
}
delete[] result;
return 0;
}
//调用前,先产生随机数种子,如srand((unsigned)time(NULL));
int random_int(int m, int n)
{
int len = n - m;
//用rand() % n 来生成 0 到 n 之间的随机数这种方法是不或取的
//比较好的做法是 (int)(n*rand()/(RAND_MAX+1.0))
return m + (int)(len*rand()/(RAND_MAX+1.0));
}
void random_int_K(int n, int k, int *pResult)
{
assert(pResult != NULL);
int *pArr = new int[n];
for(int i = 0; i < n; ++i)
{
pArr[i] = i;
}
int randomNum = 0, temp =0;
srand((unsigned)time(NULL));
for (int i = 0; i < k; ++i)
{
randomNum = random_int(i, n);
temp = pArr[i];
pArr[i] = pArr[randomNum];
pArr[randomNum] = temp;
pResult[i] = pArr[i];
}
delete[] pArr;
}
不重复的随机数
最新推荐文章于 2024-05-04 13:05:59 发布