博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生成不重复的随机数的方法
阅读量:5953 次
发布时间:2019-06-19

本文共 821 字,大约阅读时间需要 2 分钟。

《编程珠玑》有一题,需要生成0~10^7的不重复随机数。

最简单最直接的方法是,每次生成一个,然后和已经生成的进行比较,如果有了,那就重新生成。但一个显然的事实是,如果我要产生很多的数,越到后面所要花费的时间将越多。
如何又快又好的产生呢?
我们可以换个角度考虑问题,每次随机产生的可以不是具体的数,而是数在数组中的位置。算法的示意图如下:

 

#define MAXINT (10000000)void myswap(int &a,int &b);void getRandoms(int k); void myswap(int &a,int &b){    int tmp=a;    a=b;    b=tmp;} void getRandoms(int k){    int* allint;    int i=0;    FILE *fp;     if(k>MAXINT ||k<=0)        return;    srand(time(NULL));    allint=(int *)malloc(sizeof(int)*MAXINT);    for( i=0;i
=(MAXINT-k);i--) { myswap(allint[i],allint[rand()%(i+1)]); } if((fp=fopen("data.dat","w+b"))==NULL) { printf("not open"); exit(0); } fwrite(allint+MAXINT-k,sizeof(int),k,fp); fclose(fp); free(allint);} int main(int argc, char* argv[]){ getRandoms(MAXINT); return 0;}

 

转载地址:http://dgaxx.baihongyu.com/

你可能感兴趣的文章
四种方法下载网络文本数据到本地内存
查看>>
pl/sql配置连接远程数据库oracle,本地没有安装oracle数据库的情况下
查看>>
SharePoint 2013 Step by Step—— 为终端用户提供故障恢复的解决方案 Part I
查看>>
如何保护你的linux操作系统
查看>>
Linux gcc编译简介、常用命令
查看>>
[] ubuntu 14.04 搜狗拼音输入法安装
查看>>
澳大利推出NB-IOT网络 加速物联网应用
查看>>
codeforces 112APetya and Strings(字符串水题)
查看>>
Xshell 连接CentOS服务器解密
查看>>
必须要掌握的七种谈话技巧
查看>>
GNU make manual 翻译(三十)
查看>>
线性表简介
查看>>
0基础搭建Hadoop大数据处理-初识
查看>>
ASP.NET Core MVC请求超时设置解决方案
查看>>
CentOS 7 安装Mono 和 MonoDevelop
查看>>
Easyui 让Window弹出居中与最大化后居中
查看>>
greenplum 单表 数据扫描
查看>>
JQuery 的跨域方法 可跨任意网站
查看>>
Netty系列之Netty高性能之道
查看>>
Jenkins不同job之间传递参数
查看>>