此系列题目和思路均来自网络(博客等),在这里表示感谢。
题目
已知函数rand7()产生1到7的随机数,利用rand7()如何构造出函数rand10(),使得其产生随机数1~10
下面是算法的C++实现。
#include<cstdlib>
#include<iostream>
using namespace std;
int rand7(){
return rand()%7+1;
}
int rand10() {
int a = 7*(rand7()-1)+rand7();
while(a >40) {
a= 7*(rand7()-1)+rand7();
}
return a%10+1;
}
int main() {
int a[10];
for(int i=0;i<10;i++)
a[i] = 0;
for(int i=0;i<10000000;i++) {
int x = rand10();
a[x-1] = a[x-1] + 1 ;
}
for(int i=0;i<10;i++) {
cout<<i<<": "<<a[i]<<endl;
}
return 0;
}
输出结果
0: 999208
1: 998657
2: 999309
3: 1000988
4: 1001883
5: 999741
6: 1000210
7: 998822
8: 999737
9: 1001445
从输出结果可以看出效果还是不错的。
在此感谢以下本文参考的博客(排名不分先后):
1.
http://blog.csdn.net/furturerock/article/details/6850634
2.
http://blog.csdn.net/v_july_v/article/details/6803368
分享到:
相关推荐
mt_rand() 则是用了 Mersenne Twister 中已知的特性作为随机数发生器,它产生随机数值的平均速度比 libc 提供的 rand() 快四倍。所以在PHP中mt_rand()函数是非正式用来替换rand()的。 语法: rand
MySQL中的`RAND()`函数是一个非常实用的工具,用于生成0到1之间的随机浮点数。在某些场景下,我们可能需要生成指定范围内的随机整数,例如在模拟数据或者进行测试时。`RAND()`函数虽然不能直接接收参数来定义这个...
**问题描述**:已知有一个`rand7()`函数,可以返回1到7之间的随机整数,如何设计一个函数`rand10()`,使其能够返回1到10之间的随机整数? **解决方案**: 为了确保生成的随机数均匀分布在1至10之间,我们可以通过...
例如,要生成1到10之间的整数,公式应为 `=INT(RAND()*(10-1+1))+1`。 二、多行多列随机数 如果需要在多个单元格中生成随机数,可以直接复制已输入公式的单元格。Excel会自动保留公式并根据需要生成新的随机数。 ...
生成柯西分布的随机数通常需要通过变换法,即从已知的简单分布(如均匀分布或正态分布)生成随机数,然后通过特定的函数映射到柯西分布。常见的方法包括Box-Muller变换或者逆累积分布函数(Inverse Cumulative ...
根据给定文件的信息,我们可以分析出这是一个利用C/C++语言实现的小程序,主要功能是生成随机数,并通过Box-Muller变换将这些随机数转换为正态分布的随机数序列。接下来,我们将深入探讨该程序涉及的关键技术点。 #...
题目给出了前50个数的列表,可以看到它们是介于0和1之间的浮点数,这与使用`rand`函数的结果相符。 3. **分布检验**: 分布检验通常是对数据是否符合特定概率分布进行检查,例如正态分布。题目中使用了直方图`...
对于给定的均匀分布随机数`u`(0到1之间),`myQuantile(u)`将返回对应PDF的值。MATLAB中的`finv`函数可以用于从已知CDF计算ICDF,但在这里我们需要自定义。 4. **生成随机数**:现在,我们可以使用`myQuantile`...
MATLAB提供了`rand`函数生成[0,1)区间的均匀随机数,以及`randi`函数生成指定范围内的整数随机数。通过这些基本的随机数生成器,我们可以构造更复杂的随机过程,如布朗运动或马尔可夫链。 除了基础的分布函数,...
- 反函数法:如果已知随机变量X的概率密度函数(fX(x)),可以通过找到其分布函数FX(x)的反函数FX-1(r),利用(0,1)区间的均匀随机数r来生成对应分布的随机数。例如,指数分布和瑞利分布的随机数生成就是这种方法的...
其基本思路是:从一个已知的均匀分布中随机选取数值,然后通过特定的映射函数将这些数值转换为需要的分布形式。在高斯分布的情况下,我们可以使用Box-Muller变换或Ziggurat算法等方法。 高斯分布,也称为正态分布,...
例如,MATLAB中的`rand()`函数就可生成[0,1]区间内的均匀分布随机数,`rand(2,4)`则能生成2行4列的随机数矩阵。 2. 随机变量的仿真 通过函数变换原理,可以将已知分布的随机变量转换为其他分布的随机变量。例如,...
在`line_monte_carlo`函数中,首先会定义一个随机数生成器,如使用`rand()`函数,以产生[0,1)之间的随机数。然后,这个函数可能会包含以下步骤: 1. **设定积分范围**:定义积分的下限和上限,通常在我们的例子中为...
此外,可能会使用可视化工具如`histogram`或`plot`函数来绘制生成的随机数的直方图,以便与伽马分布的理论曲线进行对比,如`rand_gamma_test.png`所示。 `rand_gamma.m~`和`rand_gamma_test.m~`可能是这两个文件的...
MATLAB提供了丰富的随机数生成函数,如`randn`或`rand`,用于产生这种随机扰动。 4. **计算能量差**:能量差ΔE表示新状态与旧状态的函数值之差,即`ΔE = f(x') - f(x)`。若新状态的函数值更低,则接受新状态;...
1. 伪随机噪声生成:MATLAB中的`rand`函数可以生成均匀分布的随机数,而`randn`则用于生成符合高斯分布的白噪声。例如,`u=rand(N,1)`生成一个N阶的0.5均值、[0,1]范围内的均匀分布随机数列;`u=randn(1,N)`则生成一...
a) 均匀随机数的产生:使用`rand(m,n)`函数,可以生成m×n大小的[0,1)区间内的均匀分布随机数矩阵。 b) 任意分布随机数的产生: - 反函数法:如果已知随机变量X的概率密度函数(fX(x)),可以通过反函数FX^(-1)(r...
- `rand(n)`: 生成一个n×n的随机数矩阵,取值范围在[0, 1)之间。 - `randn(n)`: 生成一个n×n的标准正态分布随机数矩阵。 8. **复数运算**: - `complex(a, b)`: 创建复数a+bi。 - `real(z)`, `imag(z)`: 提取...