返回信息流上网看到一个产生例子,似懂非懂
#include<iostream>
using namespace std;
#include<time.h>
#define N 100
#define K 20
int x[N];
void swap(int i,int j)
{
int temp=x[i];
x[i]=x[j];
x[j]=temp;
}
int main()
{
int i;
for(i=0;i<N;i++)
x[i]=i;
srand(unsigned(time(NULL)));
for(i=0;i<K;i++){
swap(i,i+rand()%(N-i+1));
cout<<x[i]<<" ";
}
return 0;
}
疑问在于K的最大值是多少还能保证不重复?
这是一条镜像帖。来源:北邮人论坛 / cpp / #29114同步于 2009/9/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【疑问】产生互不相同的随机数
michealyao
2009/9/25镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
纯C
【 在 KevenStar 的大作中提到: 】
: 这个之间没关系
: 要想产生不相同的随机数 可以利用stl中map的单值插入(保证只存在一个)
还有一种思路:先生成一个放置序号的数组,然后从中随机抽取,抽取后为防止重复,一旦被抽中,立即归零,实现代码如下:
void generate_defferent_random(int a[], int n)
{
int *flag =(int *)malloc(sizeof(int) * n);
static flag_once = 0;
int i, index;
for(i = 0; i < n; i++) flag[i] = i+1;
if(!flag_once){
srand(time(0));
flag_once = 1;
}
for(i = 0; i < n;){
index = rand() % n;
if(flag[index] != 0){
a[i++] = flag[index]-1;
flag[index] = 0;
}
//printf("index = %d\n", flag[index]);
}
}