今天刷了概率题,不打算全面的刷概率题,就在网上看看历年的面试题
参考链接:2019 校园招聘算法面试概率题
(1)一根木棒,截成三截,组成三角形的概率是多少?
解答:设第一段为x,第二段为y,则第三段为1-x-y。
则应该满足条件:0<x<1,0<y<1,0<1-x-y<1,画图整个范围为1x1x1/2=1/2
又要满足三角形条件,两边之和大于第三边
x+y<1-x-y,x+1-x-y<y,y+1-x-y<x,得出:0<x<1/2,0<y<1/2,0<x+y<1/2,面积为1/2x1/2x1/2=1/8
所以p=1/8 / 1/2=1/4
(2)有一苹果,两个人抛硬币来决定谁吃这个苹果,先抛到正面者吃。问先抛这吃到苹果的概率是多少?
解答:假设第一个人先吃到的概率为p,第一个人吃到苹果的次数可能是第1,3,5...次,第二个人是第2,4,6...
第二轮吃到苹果和第一轮吃到苹果的概率相同,所以p=1/2+1/2X1/2Xp,得到p=2/3
(3)一个三角形, 三个端点上有三只蚂蚁,蚂蚁可以绕任意边走,问蚂蚁不相撞的概率是多少?
解答:三只蚂蚁,每只蚂蚁有两种走的轨迹,所以总共有8种可能
但是蚂蚁不相撞的可能只有同时顺时针和逆时针爬行2种情况,所以不相撞p=1/4
(4)扔筛子游戏
问题描述: 商家发明一种扔筛子游戏,顾客扔到多少点就得到多少钱,但扔筛子之前顾客需要付一定数量的钱 x,假设商家和顾客都足够聪明(1)顾客付一次钱可以扔一次的情况下,顾客能接受的最大 x 是多少(2)现在规则改为顾客付一次钱可以扔两次,顾客扔了第一次之后可以选择是否继续扔第二次,如果扔了第二次则以第二次的结果为准,如果没有扔第二次就以第一次的结果为准,这时顾客能接受的最大 x 为多少。
解答:(1)顾客能接受的就是扔一次的期望:1/6(1+2+3+4+5+6)=3.5
(2)只有第一次扔的1,2,3,才会有第二次扔,1/6X(4+5+6)+1/2X1/6X(1+2+3+4+5+6)=4.25
(5)已知一随机发生器,产生 0 的概率是 p,产生 1 的概率是 1-p,现在要你构造一个发生器,使得它产生 0 和 1 的概率均为 1/2(随机数生成)
解答:0:p,1:1-p
产生两个数:00:pXp,01:pX(1-p),10:(1-p)Xp;11:(1-p)X(1-p),可以看出01,10的概率是一样的,所以把组合为00,11的舍弃,让01映射为0,10映射为1,那样0和1产生的概率就相等了。
(6)已知一随机发生器,产生的数字的分布不清楚,现在要你构造一个发生器,使得它产生 0 和 1 的概率均为 1/2(随机数生成)
解答:产生随机数a,b数字分布可能为1.a<b,2.a=b,3.a>b
其中1.3发生的概率相等,分别映射为1和0,把相等的情况丢弃
(7)已知有个 rand7() 的函数,返回 1 到 7 随机自然数,怎样利用这个 rand7() 构造 rand10(),随机 1 ~ 10
解答:产生随机数的主要原则是每个数出现的概率是相等的,如果可以得到一组等概率出现的数字,那么就可以从中找到映射为 1 到 10 的方法。
rand7()随机产生1至7的自然数,构造产生随机数的函数:(rand7()-1)X7+rand7()随机产生1到49的自然数,且出现的概率相等。
丢弃 41 到 49 的数字,把 1 到 40 的数字分成 10 组,每组映射成 1 到 10 中的一个,得到随机的结果。
具体方法是,利用 (rand7() - 1) * 7 + rand7() 产生随机数 x,如果大于 40 则继续随机直到小于等于 40 为止,如果小于等于 40,则产生的随机数为 (x - 1) / 4 + 1。
(8)已知有个randM()的函数,返回1到M随机自然数,怎样利用这个randM()构造randN(),随机1~N。
解答:分情况讨论
(1)当 N <= M 时,可以直接使用 randM() 获取随机数,>N的随机数丢弃,<=N 的随机数输出即可。
(2)当 N > M 时候,需要构造 rand= (randM() - 1) * M + randM() 随机 1 ~ M2 的数值.
(3)如果rand仍然小于N,那么对 rand
继续重复(2)操作,如果randM2大于 N 则停止跳到 (1)