大牛门徒-算法详解02-微軟概率問題:rand7()的問題

这是一道微软的面试真题

:已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10。

图片

:这题主要考的是对概率的理解。程序关键是要算出rand10,1到10,十个数字出现的考虑都为10%.根据排列组合,连续算两次rand7出现的组合数是7*7=49,这49种组合每一种出现考虑是相同的。怎么从49平均概率的转换为1到10呢?方法是:

1.rand7执行两次,出来的数为a1=rand7()-1,a2=rand7()-1.

2.如果a1*7+a2<40,b=(a1*7+a2)/4+1;如果a1*7+a2>=40,重复第一步。

参考代码如下所示:

int rand7()

{

  return rand()%7+1;

}

int rand10()

{

  int a71,a72,a10;

  do

  {

    a71= rand7()-1;

    a72 = rand7()-1;

    a10 = a71 *7 + a72;

  } while (a10>= 40);

  return (a71*7+a72)/4+1;

}

图片

我们解题的时候一定要想一下最优解,不然可能让我们就算做出来了这道题可能也得不了高分 今年的求职因为疫情原因可谓格外的惨烈,我们建了一个微信的讨论群,在群里会分享解题方法和面试官的出题思路,还有一些行业的内部信息。篇幅所限,在此不能一一赘述,要制霸面试,需要系统的把lc啃下来,并能触类旁通,每几个月我们几个谷歌微软的leader也会开班授课,比较系统的讲解leetcode,也会带同学做做内部项目,帮助同学增加项目经历。 

进群可以加微信:Google_Mingshuo

最后祝大家能够顺利入职大厂,拿到offer~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值