返回[0,n)中的一个随机数
来源:互联网 发布:腾讯程序员工资 编辑:程序博客网 时间:2024/06/06 04:59
一般返回一个[0,n)的随机数,都会使用rand()%n。rand()函数返回区间为[0,RAND_MAX]中的一个数。RAND_MAX在<cstdlib>中定义的。实际上rand()是一个伪随机函数。并且如果n的值很大,那么RAND_MAX就不会均匀地被n除尽,一些余数出现的概率将会比其他的更大。假定RAND_MAX是32767,且n等于20000。则rand()将会有两个不同的值能令rand()%n等于10000(即10000和30000),但rand()仅有一个值能让rand()%n等于15000(即15000)。所以rand()%20000产生10000的概率是产生15000概率的两倍。
为了避免这些缺陷,我们将使用一种不同的策略。把这些可利用的随机数分成长度精确相等的存储桶。我们能计算一个随机数并返回相应的存储桶的编号。因为存储桶的长度相同,所以某些随机数根本没可能进入到任何的存储桶中。这样的话,我们会反复请求随机数,直到获得一个合适的为止。
为了避免这些缺陷,我们将使用一种不同的策略。把这些可利用的随机数分成长度精确相等的存储桶。我们能计算一个随机数并返回相应的存储桶的编号。因为存储桶的长度相同,所以某些随机数根本没可能进入到任何的存储桶中。这样的话,我们会反复请求随机数,直到获得一个合适的为止。
代码如下:
// return a random integer in the range `[0,' `n)'int nrand(int n){if (n <= 0 || n > RAND_MAX)throw domain_error("Argument to nrand is out of range");const int bucket_size = RAND_MAX / n;int r;do r = rand() / bucket_size;while (r >= n);return r;}
- 返回[0,n)中的一个随机数
- 生成一个0-N的随机数
- 返回一个随机数
- 如何生成[0, N)中的随机数
- 给定一个整数n,返回n!中的尾随零数。
- 写一个函数,要求传入一个1到n位数的随机数值,如传入随机数123456789,返回12345金币67银币89铜币,传入随机数1234,返回0金币12银币34铜币。 提示:推荐Int,Rnd,Mid,L
- 如何由一个返回0或1的随机数函数,得到更大的随机数?
- js 返回一个随机数的方法
- 通过一个可以随机产生0和1的随机数生成产生0到n的随机数
- 有一个整数n,写一个函数f(n),返回0到n之间出现的"1"的个数。
- 有一个整数n,写一个函数f(n),返回0到n之间出现的"1"的个数
- 自定义的随机数生成类,“01二值随机数”,“01浮点随机数”,“0n整随机数”
- 一个取n个不同的随机数的算法
- C语言产生一个[M, N]区间上的随机数
- 对一个数组中的随机数进行排序
- 生成1-n中的k个不相同的随机数
- 给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?
- 给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?
- 夏花已逝,秋风易老
- C语言实现encode和decode
- android 读取ini文件
- 情态动词有can (could), may (might), must, have to, shall (should, will (would), dare (dared), need (neede
- Android AIDL使用详解
- 返回[0,n)中的一个随机数
- PHP连接MySQL
- C++面试题
- vmware中虚拟机和主机ping不通的问题。
- 统计奇数因子
- 奇数因子
- Design pattern:Factory Method
- IOS应用程序发布授权文件过期的处理方法
- Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist的解决方法