有一个能够产生1-5的随机数的函数,如何利用这个函数实现产生1-7的随机函数。

0人阅读 评论(0) 收藏 举报
分类:

题目

给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数。 (即:使用函数rand5()来实现函数rand7())。

解答

要生成一个1-7的随机数,等可能概率。

首先,考虑第一个问题:等可能概率。随机数是等概率的事件,就是1,2,3,4,5,出现的概率应该是相同的,而不是其中某一种概率大一点。

看这个公式 5*(x-1)+x;(x是1-5的随机数)

那么 5*(x-1)会是等可能的0,5,10,15,20

x会是等可能的1,2,3,4,5;

那么这个值就是等可能的0-25。


然后,考虑第二个问题:如何产生1-7?

产生1-7最直观的方法就是:对7取模加一;

但是0-25对7取模最后结果0-6产生的概率不一样;

很简单,如果大于21,再随机一次就好了。


好了,这是代码:

int Rand7(){
    int x = ~(1<<31); // max int
    while(x > 21)
        x = 5 * (Rand5() - 1) + Rand5() // Rand25
    return x%7 + 1;
}

思考:

1.现在我给你两个生成随机数的函数Randa, Randb。Randa和Randb分别产生1到a的随机数和1到b的随机数,a,b不相等 (相等就没必要做转换了)。现在让你用Randa实现Randb。

2.如果给你两个生成随机数的函数Randa和Randb, 你可以通过以下方式轻松构造Randab,生成1到a*b的随机数。

3.给你一个随机生成a到b的函数, 用它去实现一个随机生成c到d的函数。


查看评论

C++ Builder 6 BizSnap/SOAP/WebService(2) -- 通过 SOAP 传递自定义类型数据(改)

    说明:本文经过一些改动,纠正了一些问题,因为原文无法修改,只好重发。不久前我收到几位朋友发来Mail说明他们在按照本文所述进行WebService应用开发时碰到的一个问题:在用ISAPI方式编...
  • Raptor
  • Raptor
  • 2002-08-19 16:31:00
  • 5072

如何根据可以产生1-5随机数的函数自己产生1-7的随机数?

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T...
  • sinat_23079759
  • sinat_23079759
  • 2016-10-11 23:28:24
  • 2157

给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数。

某所某中心的笔试题,感觉真的是分分钟被碾压 已知rand5()产生0-5的随机整数,利用该函数生成函数rand7()产生0-7的随机整数。 rand5可以随机生成1,2,3,4,5;rand7可以随机...
  • MDreamlove
  • MDreamlove
  • 2015-09-20 19:22:52
  • 3321

已知一个函数f可以得到1-5间的随机数,问怎么得到1-7的随机数

I suppose what you mean is given a random number generator that generates 1- 5 with equal prob. (1/...
  • ppppppppp2009
  • ppppppppp2009
  • 2013-02-18 18:31:00
  • 1982

给定产生1-5的随机数,求1-7的随机数函数

1-5随机数的产生:int random5() { int x = rand(); //调用随机函数 if (x > 32000) return random5(); re...
  • taoyanqi8932
  • taoyanqi8932
  • 2016-08-17 20:35:24
  • 457

算法:1-5均匀的随机数,生成1-7的均匀随机数

首先,大家对概率要有一定的了解,个人觉得程序员不搞点数学,就像walking dead 中的gost,一点灵魂都没有。 给定 了1-5的随机数,且是均匀分布的。要扩展成1-7的均匀分布的随机数。不要用...
  • gaojiaoyou
  • gaojiaoyou
  • 2014-04-08 20:53:55
  • 1049

给定一个自定义函数,random5() 可以随机生成1-5之间的随机数,请利用rondom5()定义一个rondom

// random5() 已经定义 int random5() function(){ /* */ }int random7(){ int a = random5(); if(a==3){ ...
  • sinat_32067081
  • sinat_32067081
  • 2016-11-05 17:17:19
  • 439

随机数产生转换-根据(1,5)随机数生成器,生成(1,7)之内的随机数

1. 题目     给定一个随机数生成器,这个生成器能均匀生成1到5(1,5)的随机数,如何使用这个生成器生成均匀分布的1到7(1,7)的数? 2. 思路    方法一:生成两个(1,5)的随机...
  • zheng0518
  • zheng0518
  • 2016-03-19 10:34:48
  • 3469

VBA产生随机数的函数

'Dim min As Integer '定义随机数的最小值 'Dim max As Integer ...
  • jinggangshi
  • jinggangshi
  • 2015-03-23 10:43:04
  • 2528

一道面试题:等概率随机数

题目:假设有两个函数 rand3()可以产生随机的0、1、2,rand5()可以产生随机的0、1、2、3、4,现在请你利用它编写一个函数rand7(),产生0~6的随机数。方法1:利用数组int ra...
  • qq_27183003
  • qq_27183003
  • 2016-01-30 14:09:15
  • 1305
    个人资料
    持之以恒
    等级:
    访问量: 8410
    积分: 585
    排名: 9万+
    最新评论