Matlab中:P = randperm(N,M)
产生1~N中M个随机数,不重复
所以randperm(N,M)中,N一定大于等于M。
#include <algorithm>
#include <time.h>
void randperm(int N, int M, int *P)
{
for(int i = 0; i < M; i++)
{
P[i] = (rand() % N + 1);
for(int j = 0; j < i; j++) // 判断和前面的数是否重复
{
if(P[i] == P[j]) { i--; break;}
}
}
}
int main()
{
int N = 10, M = 5;
int *p = new int[M];
srand((unsigned int)time(NULL)); //随机数种子放到外面,保证在多次调用函数时产生的随机数不会重复
randperm(N, M, p);
for (int i=0; i<M; i++)
printf("%d\t",p[i]);
delete[] p;
system("pause");
return 0;
}
运行结果: