一道概率算法题

1我一个同学电话面试阿里实习生遇到的一道概率题:

有个函数foo,返回0和1的概率都是50%,让你自己写一个函数,使返回0和1的概率分别是30%和70%。

这道题乍一看不知道咋下手,其实还很简单的,相当于利用了遗传算法的思想,每次产生一个数字,然后以为,一共产生四个数字,这样就可以得到一个四位的数字,即0~16,只要这个数字大于等于10就抛弃,这样产生0~9的数字,而且0~9的数字出现的概率是随机的,这样,0~2返回0,3~9返回1,这样,就满足了题目要求。

 

2 此题的反变换。有道题说的是有个函数foo,返回0的概率是60%,返回1的概率是40%,让你自己写一个函数,使返回0和1的概率是50%,

用前面说的foo函数实现,不能用像c++里面的rand这类的函数,怎么解?

网上看到某个牛人的答案,如下:

我的直觉,太简单了,调用foo两次即可,
连续两次,出现 0 1 和 1 0 的概率是一样的,于是就能构造出50%
(两次返回 0 0 或 1 1的结果丢掉,重新调用)

返回0 1 -> 当作 0
返回1 0 -> 当作 1

代码简单的要屎,如下

        int half01()
        {
            while(1)
            {
                int a = foo();
                int b = foo();
          
                if(a != b) return a;
            }
        }

 

转载于:https://www.cnblogs.com/qiaozhoulin/p/5278171.html

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一篇 面试 ................................................................................ 8 1.1. 简介 ............................................................................................................... 8 1.2. 面试集合(一) .......................................................................................... 8 1.2.1. 把二元查找树转变成排序的双向链表.................................................... 8 1.2.2. 下排每个数都是先前上排那十个数在下排出现的次数 ..........................11 1.2.3. 设计包含 min 函数的栈 ...................................................................... 14 1.2.4. 求子数组的最大和.............................................................................. 20 1.2.5. 在二元树中找出和为某一值的所有路径 .............................................. 22 1.2.6. Top K 算法详细解析---百度面试 ......................................................... 29 1.2.7. 翻转句子中单词的顺序....................................................................... 31 1.2.8. 判断整数序列是不是二元查找树的后序遍历结果 ................................ 33 1.2.9. 查找最小的 K 个元素-使用最大堆....................................................... 35 1.2.10. 求二叉树中节点的最大距离................................................................ 37 1.3. 面试集合(二) ........................................................................................ 40 1.3.1. 求 1+2+…+n....................................................................................... 40 1.3.2. 输入一个单向链表,输出该链表中倒数第 k 个结点............................. 44 1.3.3. 输入一个已经按升序排序过的数组和一个数字.................................... 46 1.3.4. 输入一颗二元查找树,将该树转换为它的镜像.................................... 48 1.3.5. 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往 右的顺序打印................................................................................................... 49 1.3.6. 在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b 52 1.3.7. n 个数字(0,1,…,n-1)形成一个圆圈 .................................................. 53 1.3.8. 定义 Fibonacci 数列 ............................................................................ 58 1.3.9. 左移递减数列查找某一个数.........................................

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值