`
samuschen
  • 浏览: 407542 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

已知rand7(),求rand10().

 
阅读更多
已知rand7(),求rand10().
已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10。
view plain

    根据排列组合,连续算两次rand7出现的组合数是7*7=49,这49种组合每一种出现考虑是相同的。 
    怎么从49平均概率的转换为1到10呢? 
    方法是: 
    1.rand7执行两次,出来的数为a1.a2. 
    2.如果a1*7+a2<40,b=(a1*7+a2)>=40,重复第一步) 
     
    int rand10() 
    { 
        int a71, a72, a10; 
         
        do  
        { 
            a71 = rand7() - 1; 
            a72 = rand7() - 1; 
            a10 = a71 *7 + a72; 
        } while (a10 >= 40); 
         
        return (a10) / 4 + 1; 
    }  

分析:

a10 = a71 *7 + a72; 会产生0~48共49个数,每个数产生的概率都是1/49.

生成的数只要<40,那么就跳出循环,那么共有40个数(0~39),每个数的概率相等,那么可以认为每个数的概率为1/40;

最后(a10) / 4 ;也就是把每这40个数切割成10等分,最后产生0~9, 10个数,每个数的概率都是1/10, 再加上1,产生的数为1~10,即rand10().

而且我们可以得到一般规律根据 RndM 得到 RndN
如果 M > N,那最简单,只要剔除 M > N 的数据,返回就可以了。
如果 M < N,首先用延展方法将 M 延展到 xM,xM > N然后再用上面的办法获取。
分享到:
评论

相关推荐

    matlab开发-randgamma

    测试通常包括生成一系列随机数,然后与已知的统计特性进行比较,例如期望值、方差以及分布的形状。此外,可能会使用可视化工具如`histogram`或`plot`函数来绘制生成的随机数的直方图,以便与伽马分布的理论曲线进行...

    PHP随机数函数rand()与mt_rand()的讲解

    另外,由于libc随机数发生器的一些特性可能会不够确定或已知,这可能会导致在某些情况下生成的随机数并不满足实际需求的随机性标准。尽管如此,rand()函数在某些情况下仍然会被使用,比如在不需要高度随机性的简单...

    matlab矩阵练习题含答案.doc

    7 8 0],求其特征多项式并求其根。 在 Matlab 中,使用 `eig` 函数可以计算矩阵的特征值和特征向量。 5. 已知多项式 a(x)=x2+2x+3,b(x)=4x2+5x+6,求 a、b 的积并微分。 在 Matlab 中,使用 `conv` 函数可以计算...

    MySQL的指定范围随机数函数rand()的使用技巧

    MySQL中的`RAND()`函数是一个非常实用的工具,用于生成0到1之间的随机浮点数。在某些场景下,我们可能...记住,解决问题的关键是将复杂的问题简化为已知的解决策略,这就是降低要求使得已掌握的知识达到需求的技巧。

    matlab考试复习资料.doc

    7. A=rand(2,5);b=size(A);c=length(A);则b和c的值分别为 [ 2 ,5 ]和 5 。 8. 为了使两个plot的图形在同一个坐标显示,可以使用hold on命令进行图形保持;可以使用grid on命令为图形添加网格。 9. MATLAB的工作空间...

    某些特殊概率分布之间的相互变换1

    实现这一目标的方法是过滤掉大于7的随机数,即每当`rand_10()`产生8、9或10这三个数时,我们将其忽略,再次调用`rand_10()`,直到得到一个介于0到6之间的数为止。 在理论上,我们需要确保`rand_7()`生成的每一个数...

    电大C语言程序设计作业答案.pdf

    11. **随机数**:`rand()`函数生成的是0到RAND_MAX之间的随机数,`rand()%20`取模后,值在0到19之间,选项C正确。 12. **已知循环次数的循环结构**:对于已知循环次数的情况,通常使用`for`循环,选项A正确。 13. ...

    matlab考试试题库答案解析.docx

    12. 已知 A 是矩阵,求 A 的对角矩阵函数是 diag ;求 A 的下三角矩阵函数是 tril。 13. 程序文件和 Simulink 模型文件的扩展名分别是 .m、.mdl。最基本的绘图函数为 plot()。 14. A = [1,2,3; 4,5,6]; A(:,[1,3])...

    Matlab考试试题库-答案解析.docx

    13. 已知A是矩阵,求A的对角矩阵函数是diag,求A的下三角矩阵函数是tril。 14. Matlab的程序文件和Simulink模型文件的扩展名分别是.m、.mdl。 十四、Matlab图形绘制 15. Matlab最基本的绘图函数为plot()。 16. A=...

    电大C语言程序设计形成性考核册答案(1-4).pdf

    11. **随机数生成**:`rand()`函数生成的随机数在0到`RAND_MAX`之间,`%20`表示取余数,因此结果在0到19之间,选项C正确。 12. **已知次数的循环**:当循环次数已知时,通常用`for`循环,选项A正确。 13. **swithc...

    c语言程序设计A答案.doc

    12. 已知循环次数的循环结构:通常用`for`循环来解决,因为可以方便地在初始化、条件检查和步进操作中设置循环次数。选项A正确。 13. `switch`语句改写:如果每个`case`块都以`break`结束,那么可以改写为一系列的`...

    科学计算与MATLAB 1.5 (2).pdf

    17. 建立 5 阶由两位随机整数构成的矩阵 A,其语句是 A= fix(10+90*rand(5,5))。 18. 建立 3 阶魔方阵 M 的语句是 M=magic(3)。 19. 产生以(x+y)5 展开后的系数构成的对角阵 P,可以采用的语句是 P=diag(flipud...

    二维插值的基本算法及算例

    x = rand(10,1); y = rand(10,1); z = rand(10,1); % 选择未知点 x_star = 0.5; y_star = 0.5; % 使用最邻近插值算法 z_star = nearest_neighbor_interpolation(x, y, z, x_star, y_star); % 使用分片线性插值...

    C基础第八天作业CCCCCCC

    例如,已知int x=10,y=20,z=30;,以下语句执行后x,y,z的值是x=20,y=30,z=10。 5. 宏定义的使用:在C语言中,宏定义可以用于简化代码。例如,请读程序:#define ADD(x) x+xmain(){int m=1,n=2,k=3;int sum=ADD(m+n)*k;...

    (完整版)科学计算与MATLAB语言2019尔雅答案.doc

    16. 建立5阶由两位随机整数构成的矩阵A,其语句是A=fix(10+90*rand(5))。 17. 建立3阶魔方阵M的语句是M=magic(3)。 18. 产生以(x+y)5展开后的系数构成的对角阵P,可以采用的语句是P=diag(diag(flipud(pascal(6))))...

    电大C语言作业及答案.pdf

    10. 随机数:`rand()`函数返回的是0到RAND_MAX之间的随机整数,`rand()%20`的值在0到19之间(选项C)。 11. 循环结构:已知循环次数的问题通常用`for`循环解决(选项A);`switch`语句可以改写为`if...else`结构...

Global site tag (gtag.js) - Google Analytics