问题:生成[0,N-1]区间内的n个互不相同的随机数。 解决思路:首先,生成一个长度为N的数组,然后将其打乱,取前n个数,即为上述问题的解。 为了验证上述方法产生的随机数是符合要求的,我们用下面的方法来检验。 每次随机的从[0,N-1]中选取n个数,记它们的和为X,则X的期望可以计算如下: 这样选取n个数总共有 C N n C_N^n CNn中取法,这么多取法总共取出了 C N n ∗ n C_N^n*n CNn∗n个数,而0,1,2,…N-1这N个数出现的概率是相同的,因此每个数出现了 n ∗ C N n N \dfrac{n*C_N^n}{N} Nn∗CNn次,于是它们的和为 ( 1 + N ) ∗ N 2 ∗ n ∗ C N n N = 1 + N 2 ∗ n ∗ C N n \dfrac{(1+N)*N}{2}*\dfrac{n*C_N^n}{N}=\dfrac{1+N}{2}*n*C_N^n 2(1+N)∗N∗Nn∗CNn=21+N∗n∗CNn 故X的期望E(X)为 E ( X ) = ( 1 + N ) ∗ n 2 E(X)=\dfrac{(1+N)*n}{2} E(X)=2(1+N)∗n 下面是代码:
#include
#include
#include
#pragma GCC optimize(3,"Ofast","inline")
using namespace std;
void generate_non_repeat_n_random_num(int n,int N,int *arr){
//生成介于0-N之间的n个不重复的随机数
srand(time(0));
for(int i=0;in;
coutcnt;
arr=new int[N];
generate_non_repeat_n_random_num(n,N,arr);
int i=0;
long long sum=0;
while (i++
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?