牛刀小试(02)——生成不重复的随机数
来源:互联网 发布:淘宝店网址花钱改 编辑:程序博客网 时间:2024/05/16 08:18
牛刀小试(02)——生成不重复的随机数
标签: 牛刀小试
1.题目描述
要求生成一个随机序列,要求其中的数不能重复。
2.思路解析
C/C++提供了生成随机数的函数rand()
,不过有两个问题
- 该函数生成的是伪随机数
- 该函数生成的随机数有可能重复
之所以是伪随机数,是因为rand()
是根据一个初始值来计算“随机数”的,如果初始值一样,则生成的“随机序列”也是一样的,所以可以通过设定随机种子来生成“真-随机数”
至于随机数不能重复,我们可以生成一个不重复的序列,假设数组a[n]
满足该条件,先从下标[1,n-1]
中随机取一个下标j,让a[0]
和a[j]
交换;然后再从下标[2,n-1]
中随机取一个下标j
,让a[1]
和a[j]
交换;……;然后再从下标[i+1,n-1]
中随机取一个下标j
,让a[i]
和a[j]
交换;……;直到剩下a[n-1]
为止。
3.代码解析
#include <iostream>#include <fstream>#include <stdlib.h>using namespace std;int main(int argc, char *argv[]){ int a[10000]; for (int i=0; i<10000; i++)//生成不重复序列 a[i]=i; srand((int)time(NULL));//设定随机数种子 for (int i=10000; i>0; i--)//为了写着方便,倒序交换 { int j = rand()%i; int temp = a[i-1]; a[i-1] = a[j]; a[j] = temp; } ofstream file("data.txt");//保存数据,以便测试 for (int i=0; i<10000; i++) file<<a[i]<<"\t"; file.close(); return (0);}
4.数据查看
使用python把前500个数据画成散点图,如下:
使用python把前4000个数据画成散点图,如下:
总体看来没有明显的间隔和聚集区域,直观上这些数据是随机的,当然可以使用数学方法检测数据的随机性(游程检验),感兴趣的同学可以试试
0 0
- 牛刀小试(02)——生成不重复的随机数
- Random——生成不重复的随机数
- 生成不重复的随机数
- 生成不重复的随机数
- 生成不重复的随机数
- 生成不重复的随机数
- 生成不重复的随机数
- 生成不重复的随机数
- 生成不重复的随机数
- 生成不重复的随机数
- 明明的随机数(不重复,排序)+随机数生成
- 生成不重复随机数
- 生成不重复随机数
- 生成不重复随机数
- 不重复随机数生成
- 不重复随机数生成
- C#生成随机数之二 生成不重复的随机数
- 随机数生成不重复的一组数(类似于抓阄)
- Java多线程-wait(), notify(), notifyAll()、yield()、sleep()、join()、interrupt()原理及使用
- 压缩感知(I) A Compressed Sense of Compressive Sensing (I)
- HDOJ 1102 Constructing Roads
- Android BlueDroid(二):BlueDroid蓝牙开启过程init
- 微信卡券核销
- 牛刀小试(02)——生成不重复的随机数
- 【数据结构SPLAY】splay区间翻转,区间和查询,区间插入,区间删除,区间修改
- “Cannot make a static reference to the non-static method”处理方法
- 如何给calendar4.4 日历月视图添加左右滑动的功能
- 压缩感知(II) A Compressed Sense of Compressive Sensing (II)
- Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile)
- redis 安装(sentinel 方式)
- HttpUrlConnection访问服务器登录 get post
- 压缩感知(III) A Compressed Sense of Compressive Sensing (III)