17.11 Implement a method rand7() given rand5(). That is, given a method that generates a random number between 0 and 4 (inclusive), write a method that generates a random number between 0 and 6 (inclusive).

这道题说给了我们一个rand5()函数,可以生成0到4之间的随机数,让我们写一个函数rand7()可以生成0到6之间的随机数,那么我们写出来的这个rand7()函数必须生成0到6之间每个数字的概率为1/7。那么我们首先想能不能用(rand5()+rand5())%7来做,答案是不行的,我们来看一下rand5()+rand5()中每个数字出现的概率:

0 (1/25)

1 (2/25)

2 (3/25)

3 (4/25)

4 (5/25)

5 (4/25)

6 (3/25)

7 (2/25)

8 (1/25)

而我们需要的rand7()是要0到6中每个数的出现概率是1/7才行,所以我们必须生成一个区间,每个数字的出现概率是相同的。那么我们可以用5*rand5()+rand5(),这生成了[0, 24]区间中的25个数字,每个数字的出现概率都是1/25,那么我们只要当随机生成的数字小于21,对7取余返回即可:

解法一:

  1. int rand7() {
  2. while (true) {
  3. int num = * rand5() + rand5();
  4. if (num < ) {
  5. return num % ;
  6. }
  7. }
  8. }

其实我们也可以用2*rand5()来生成等概率区间,就是稍微麻烦一些,因为rand5()*2等概率的生成0,2,4,6,8,所以我们需要构造一个等概率生成0,1,和rand5()*2相加就是等概率生成[0,9]区间的数,参见代码如下:

解法二:

  1. int rand7() {
  2. while (true) {
  3. int r1 = rand5() * ;
  4. int r2 = rand5();
  5. if (r2 != ) {
  6. int num = r1 + r2 % ;
  7. if (num < ) {
  8. return num;
  9. }
  10. }
  11. }
  12. }

CareerCup All in One 题目汇总

[CareerCup] 17.11 Rand7 and Rand5 随机生成数字的更多相关文章

  1. [CareerCup] 18.3 Randomly Generate Integers 随机生成数字

    18.3 Write a method to randomly generate a set of m integers from an array of size n. Each element m ...

  2. 【转】有rand7(可以随机生成1到7的数据的随机函数),如何产生rand10(随机产生1-10的数)

    今天停GJP说在面试的时候碰到了一道这样的题目:有rand7(可以随机生成1到7的数据的随机函数),如何产生rand10(随机产生1-10的数) 感觉很有意思,找到了这篇博客,感觉解法很好玩,转载在这 ...

  3. 使用JavaScript随机生成数字混合字母的验证码

      <script> // 封装一个随机生成数字的函数 function random(a, b) { var n = Math.round(Math.random() * (a - b) ...

  4. php 随机生成数字字母组合

    直接上代码: function getRandomString($len, $chars=null) { if (is_null($chars)) { $chars = "abcdefghi ...

  5. Java定时器Timer,TimerTask每隔一段时间随机生成数字

    1:java.util.Timer类是一种工具,线程用其安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行. 2:TimerTask类是由 Timer 安排为一次执行或重复执行的任务 ...

  6. php随机生成数字加字母的字符串

    function getRandomString($len, $chars=null) { if (is_null($chars)) { $chars = "ABCDEFGHIJKLMNOP ...

  7. Java基础之随机生成数字和字母

    字母与数字的ASCII码 目 前计算机中用得最广泛的 字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information I ...

  8. iOS随机生成数字

    有时候我们需要在程序中生成随机数,但是在Objective-c中并没有提供相应的函数,好在C中提供了rand().srand().random().arc4random()几个函数.那么怎么使用呢?下 ...

  9. JAVA ArrayList实现随机生成数字,并把偶数放入一个列表中

    package Code429; import java.util.ArrayList;import java.util.Random; public class CodeArrayListPrint ...

随机推荐

  1. C/C++面试题

    第一部分:基本概念及其它问答题 1.   关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量 ...

  2. 在Salesforce中进行Report和Dashboard的配置

    用Report和Dashboard去图形化比较不同Object的信息是一个十分普遍的需求,当然我们可以完全用Visual Page和Classes去自定义对应的Report和Dashboard的功能. ...

  3. windows mysql 自动备份的几种方法

    转自:http://www.cnblogs.com/liongis/archive/2013/03/12/2956573.html 1.复制date文件夹备份===================== ...

  4. Nginx+Resin实现高性能JAVA平台搭建

    现在流行的JavaEE容器有很多:Tomcat.Resin.JBoss.Glassfish等,我们常用的主要是前三种,那这个java容器性能方面到底谁更稳定,并发能力更强呢?那当属resin了,res ...

  5. ASP.NET中Url编码解码

    今天遇到Url编码解码的问题,纠结了一天的时间,结果上网一查才发现太二了我们. 同事写的代码把url用HttpUtility.UrlEncode编码和解码了,本地测试没有问题,部署到服务器上就提示转码 ...

  6. 安装PyMysql的基本步骤

    X:\Users\**>c: c:\>cd python c:\Python>python ez_setup.py Downloading https://pypi.io/packa ...

  7. 对NLP的一些新认识

    其实这是老板让上交的一份总结,贴出来,欢迎朋友们批评指正. 最近看了一部分关于NLP的几篇论文,其中大部分为神经网络实现, 从基本的HMM算法实现,到LSTM实现,有很多方法可以用来处理NLP任务中的 ...

  8. 为什么使用BeagleBoneBeagleBone的优点

    为什么使用BeagleBone BeagleBone的优点 当前,一个典型的基于微控制器板的售价在120元左右,而BeagleBone Black的售价在330元左右.除了更强大的处理器之外,你额外的 ...

  9. 01_Java语言基础部分(数据类型与表达式、流程控制语句、数组与方法)

    1. Java语言主要由5中符号组成 标识符:数字.字母.美元符.下划线(注意不能数字开头) 关键字(被Java赋予特殊意义的单词,注意所有关键字都是小写):   goto和const保留了它们,但是 ...

  10. BZOJ 3932 [CQOI2015]任务查询系统 ——可持久化线段树

    [题目分析] 主席树,维护区间大小以及权值之和. 但是细节确实要琢磨很久,WA了几次. [代码] #include <cstdio> #include <cstring> #i ...