来自 http://blog.csdn.net/wuxianglong/article/details/6804216的一道题。
题目:
给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一样。现要求使用该函数构造函数rand7(),使函数rand7()可以随机等概率的生成1-7的整数。
思路:
很多人的第一反应是利用rand5() +
rand()%3来实现rand7()函数,这个方法确实可以产生1-7之间的随机数,但是仔细想想可以发现数字生成的概率是不相等的。rand()%3
产生0的概率是1/5,而产生1和2的概率都是2/5,所以这个方法产生6和7的概率大于产生5的概率。
正确的方法是利用rand5()函数生成1-25之间的数字,然后将其中的1-21映射成1-7,丢弃22-25。例如生成(1,1),(1,2),(1,3),则看成rand7()中的1,如果出现剩下的4种,则丢弃重新生成。
简单实现:
public class Test {
public int rand7() {
int x = 22;
while(x > 21) {
x = rand5() + (rand5() - 1)*5;
}
return 1 + x%7;
}
}
我的备注:
这种思想是基于,rand()产生[0,N-1],把rand()视为N进制的一位数产生器,那么可以使用rand()*N+rand()来产生2位的N进制数,以此类推,可以产生3位,4位,5位...的N进制数。这种按构造N进制数的方式生成的随机数,必定能保证随机,而相反,借助其他方式来使用rand()产生随机数(如
rand5() +
rand()%3
)都是不能保证概率平均的。
此题中N为5,因此可以使用rand5()*5+rand5()来产生2位的5进制数,范围就是1到25。再去掉22-25,剩余的除3,以此作为rand7()的产生器.
有网友留了另外一种的办法:
(rand5()+rand5()+rand5()+rand5()+rand5()+rand5()+rand5())/5
我的备注:
这种做法根本就不对,试试1+1+1+1+1+1+1 / 5 ,除不尽。
分享到:
相关推荐
腾讯的面试题则关注了SVM的优化函数公式、随机森林的原理、XGBoost的优势等。SVM的优化函数是二次规划问题,随机森林通过构建多棵决策树来提高模型的鲁棒性。 蔚来和虾皮的面试题则包含了链表问题、二叉树遍历和数...
面试题可能包含各种实践问题,比如: - 如何使用STL实现高效的字符串反转? - 如何在不复制元素的情况下合并两个vector? - 何时使用list,何时使用vector,以及它们各自的优缺点? - 举例说明如何自定义一个...
1. C++基础知识面试题的分析 在文件中提到的第一个面试题,需要分析一个C++程序,并预测其运行结果。此题涉及到C++的构造函数、虚函数和多态的原理。给出的程序示例中,存在一个多态的例子,其中基类A定义了一个虚...
在面试准备过程中,了解和掌握一些常见的Python面试题对于求职者来说至关重要。以下将详细解释上述文件中提到的Python知识点。 1. 利用Python的内置函数sum()可以非常简便地计算序列的总和。例如一行代码`sum(range...
例如,面试官可能会问及随机森林如何通过随机抽样增加模型多样性,以及这种随机性是如何帮助提高模型准确性和鲁棒性的。对于GBDT,面试官可能关注其基于残差的学习机制,以及为何它在处理连续和离散数据时特别有效。...
"java中级面试题(自己汇总)" 本文总结了Java中级面试题,涵盖了集合、HashMap、HashSet、HashTable、ConcurrentHashMap、红黑树、Java 8对HashMap的优化、LinkedHashMap、TreeMap、IdentityHashMap等知识点。 ...
### 博彦科技面试题解析 #### 知识点一:理解“virtual”关键字 在C++编程语言中,“virtual”关键字主要用于实现多态性。它主要用在基类的成员函数前,表明该函数可以在派生类中被重写。当通过一个基类指针调用一...
Linux驱动面试题总结涉及的知识点 Linux操作系统是当今世界上使用最广泛的开源操作系统之一,它在服务器、嵌入式设备和个人计算机等多个领域都有广泛的应用。Linux驱动程序的开发是操作系统领域的核心技术之一,...
民生银行 Java 面试题解析 在本文中,我们将对民生银行 Java 面试题进行详细解析,每个问题都将被拆分成多个知识点,并对每个知识点进行详细的解释。 问题 1: 班级表和学生表 SQL 语句 在这个问题中,我们需要写...
计算机视觉算法工程师常见面试题1.pdf 本文总结了计算机视觉算法工程师常见的面试题,涵盖了反卷积、神经网络的万能逼近定理、Batch Normalization 和 Group Normalization、模型压缩、目标检测、深度学习优化等多...
C#面试题集锦 在这篇文章中,我们将讨论一些常见的C#面试题,并提供解答。这些问题涵盖了C#的基本概念、类和接口、结构体、异常处理、集合等方面。 1. const和readonly的区别 const和readonly都是用于定义常量的...
"128道Python面试题.pdf" Python基础知识点: 1. 文件操作:文件读写、文件类型、文件权限等。 2. 模块与包:Python中的模块和包、模块的导入、模块的使用等。 3. 日期处理:Python中的日期处理、日期格式化、日期...
Python作为一门广泛应用于数据分析、机器学习、Web开发和人工智能的编程语言,其面试题涵盖了从基础知识到高级特性的方方面面。以下是一些根据标题和描述所提取的重要知识点: 1. **Python基础**: - 变量与数据...
数据分析面试题-python笔面试题汇总 以下是从给定的文件信息中生成的相关知识点: 1. SciKit 包的应用: 如何利用 SciKit 包训练一个简单的线性回归模型?利用 linear_model.LinearRegression() 函数创建线性回归...
深度学习面试题通常涵盖模型架构、优化算法、正则化技术、损失函数、反向传播等核心概念,以及如何应用这些知识解决实际问题,如图像分类、自然语言处理等。理解并掌握这些知识点对于在深度学习领域寻求职业发展至关...
### Java面试题题库详解 #### 1. Java基本概念:String是什么?它与其它类型有何不同? **知识点概述:** - **String 类型的基本理解:** 在 Java 中,`String` 是一个不可变的对象,它代表了字符序列。 - **与...
- **描述**:“最新各大公司企业真实面试题-慧通面试题.txt最新各大公司企业真实面试题-慧通面试题.txt”。 - **解读**:描述部分重复了标题信息,强调了这是一份关于各大公司特别是慧通公司的实际面试题目的文档。 ...
本文将深入探讨这两个主题中的关键知识点,并结合面试题的形式进行讲解。 首先,我们来关注数据结构。数据结构是组织和管理数据的方式,它决定了数据的存储和访问效率。常见的数据结构有数组、链表、栈、队列、树、...
"MySql 相关面试题举例" 本资源摘要信息涵盖了 MySQL 相关的面试题,包括关系型和非关系型数据库的区别、MySQL 语句执行步骤、索引的使用原因、索引的三种常见底层数据结构、索引的常见类型、MyISAM 和 InnoDB 实现...
【Python数据分析面试题汇总】 1. **Python求和**:Python内置函数`sum()`可用于求和,例如`sum(range(1, 101))`将计算从1到100的所有数字的总和。 2. **全局变量修改**:在函数内部修改全局变量需使用`global`...