每日一道算法题:Google面试题:给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数

题目:给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数。

解题思路:假定随机生成整数1到5的函数为rand_five(),现在考虑函数rand_five()能否等概率的随机生成整数1到3,即能否通过函数rand_five()实现函数rand_three(),简单的思路是不断调用rand_five()生成整数1到3,再返回,代码如下:

int rand_three(){
    int x = 0;
    while (x > 3){
        x = rand_five();
    }
    return x;
}
那么函数rand_three()是否是均匀概率生成整数1到3的呢?以数字1为例,函数rand_three()是不断调用函数rand_five(),那么第一次、第二次、...、第n次都可能生成数字1,生成1的概率为: P(x = 1) = 1/5 + (2/5) * 1/5 + (2/5)^2 * 1/5 +...。

在上式中,第二项(2/5) * 1/5的意思是第一次生成的数字不是1到3,生成的是数字4和5之间的一个,后面的每一项可以以此类推。利用等比数列的性质,得出P(x = 1) = 1/3。数字2和3同理可得,P(x = 2) = P(x = 3) = 1/3。说明函数rand_three()是以均匀概率生成整数1到3的。

通过上面的分析,我们得知:当整数a小于整数b时,函数rand_a()可以通过函数rand_b()实现,那么回到原始问题,我们假设函数rand_five()能得到某个函数rand_x()&#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值