intrand5() {intx =6;while(x >5) {//将区间控制到 [1, 5]x =rand7() }returnx; } 根据以上,我们可以得出一个一般性结论:如果 A > B, 那么一定可以用 randA 去实现 randB, 其中 randA 表示等概率生成[1, a] 的函数, randB 表示等概率生成[1, b] 的函数。 回到顶部 其它解法 对于上述题...
在随机数生成中,我们常常遇到需要生成更大范围的随机数,但只有较小的范围可用。例如,假设我们有一个Rand5算法,可以生成0-4之间的随机数。如何利用它来生成0-7之间的随机数Rand7? 一、基础思路:简单的相加 最直观的方法是将两个Rand5的结果相加。但这种方法会导致生成的分布不均匀。例如,0只能由0+0生成,而3可...
(5,10)之间,等概率地补上6,7,8,9,最终变成6,7,8,9,10,实现方法:5*1+rand5() (10,15)之间,等概率地补上11,12,13,14,最终变成11,12,13,14,15,实现方法:5*2+rand5() (15,20)之间,等概率地补上16,17,18,19,最终变成16,17,18,19,20,实现方法:5*3+rand5() (20,25)之间,等概率地补...
用rand5()实现rand7()_牛客题霸_牛客网 如何只通过调用rand(5) (等概率产生整数1,2,3,4,5) 实现出: rand(3) rand(7) 朴素想法:rand(3)比较好搞,直接调用rand(5),遇到数字4,5就重新rand即可。基于这个思想,只要我能在一个较大的范围里rand,在这个里面的都可以做到,产生的超过的部分重新选择即可。
📚 想要生成1到7的随机数,但只有1到5的随机数生成器Rand5()?别担心,我们可以巧妙地利用Rand5()来创造一个全新的Rand7()函数!🎯 关键在于,Rand5()生成的随机数是均匀分布的,这意味着我们可以将这些随机数组合起来,形成一个更大的随机空间,然后将其映射到1到7的范围内。这样,我们就能保证新生成的随机数...
给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一样。现要求使用该函数构造函数rand7(),使函数rand7()可以随机等概率的生成1-7的整数。 思路: 很多人的第一反应是利用rand5() + rand()%3来实现rand7()函数,这个方法确实可以产生1-7之间的随机数,但是仔细想想可以发现数字生成的概率是不相等...
给定一个函数 rand5()可生成 [1,5] 范围内的均匀随机整数,请你试写一个方法 r。题目来自【牛客题霸】
简单实现:C++代码:int Rand5(){ int m = rand() % 5 + 1;return m;} int Rand7(){ int x = 22;while (x > 21)x = Rand5() + (Rand5() - 1) * 5;return x % 7 + 1;} 解释:rand5() 它能够等概率⽣成 1-5 之间的整数。所谓等概率就是1,2,3,4,5 ⽣产的概率均为 0....
题解| #用rand5()实现rand7()# 用rand5()实现rand7() https://www.nowcoder.com/practice/581fb9be10d647e7bb179234b42f3f5fimport random #coding:utf-8 # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # rand5() is defined # ...
由rand5()生成rand7()的线性变换解法分析可以参考[快课网](http://www.cricode.com/2456.html),我觉得这篇文章写的很好。 问题的变式为:给你一个随机生成a到b的函数, 用它去实现一个随机生成c到d的函数。 可以先考虑由生成[3,10]的随机函数rand310得到生成[5,7]的随机函数rand57,经过类似的推导可以设计...