一道概率算法题

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