给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
来源:互联网 发布:淘宝开店要6688的费用 编辑:程序博客网 时间:2024/05/16 16:01
这个题目有个隐式要求,等概率。范围内每个随机数出现的概率要相等。
方法一:位置抽取
只要我们可以从 n 个数中随机选出 1 到 n 个数,反复进行这种运算,直到剩下最后一个数即可。
我们可以调用 n 次给定函数,生成 n 个 1 到 5 之间的随机数,选取最大数所在位置即可满足以上要求。
例如
初始的 7 个数 [1,2,3,4,5,6,7].
7 个 1 到 5 的随机数 [5, 3,1,4,2,5,5]
那么我们保留下[1,6,7],
3 个1 到 5 的随机数[2,4,1]
那么我们保留下[6]
6 就是我们这次生成的随机数。
方法二:进制法
int rand7(){ int r = 0; while ((r = (rand5()*5+rand5())) > 26); return (r-3)/3;}
用rand5()进行2次随机数抽取,组成2位5进制数。
则2位5进制数的取值范围为0,1,2,3,4,10,11....34,40,41,42,43,44。一共25个数。每个数出现的机率相等。
选取前面21个数,均匀分成7组。(当然也可以只选择7个数,每组一个数。重点是保证每组包含同样的个数,确保各个组的等概率)。
计算机并不直接支持5进制数,所以得将5进制数转换成10进制数,以方便分组。
转换公式为:dec = x*5 + y
五进制: 0 1 2 3 4 10 ........ 40 41 42 43 44
十进制:0 1 2 3 4 5 …… 20 21 22 23 24
int rand7(){ int r = 0;<pre name="code" class="cpp"> while ((r = ((rand5()-1)*5+(rand5()-1))) > 20);return r / 3 + 1;}
可以再进一步简化成最开始的写法,此处只是为了体现与上面的描述的一致性。
随便例出只挑选7个数的实现
int rand7(){ int r = 0; while ((r = (rand5()*5+rand5() - 6)) > 6); return r + 1;}
另一篇博客带有测试程序:http://blog.csdn.net/peng_weida/article/details/7942682
参考资料:http://blog.csdn.net/he_haiqiang/article/details/7914983
0 0
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数。
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数。
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数。
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数。
- 给定能随机生成整数 1 到 5 的函数,写出能随机生成整数 1 到 7 的函数。
- 谷歌面试题:给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
- 谷歌面试题:给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
- 不错的博客地址
- ASP.NET2.0页面打开时乱码解决方法-HTTP 閿欒 404 - Not Found銆?/i>
- C#根据文本框存取图像
- sgu105
- wince 6.0 设备管理器架构
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
- 根据HSV查找颜色分量
- 栈与队列
- asp.Net通用防注入程序(整站通用)
- C# 存取数据库中的图像
- poj1018
- SharePoint 创建 Lookup 类型的Site Column解决跨站问题
- C#如何在 SQL Server2000 中保存图像及读取图像信息
- linux设备驱动程序中的阻塞机制