函数返回相同概率问题

我觉得这个问题不是考察面试者的coding的,而是考察脑筋急转弯。

给定一个函数f(),如果返回0的概率是p,返回1的概率是1-p  (p是0到1之间的数),
如何根据f()函数构造一个g()函数使得其返回0或者1的概率都是50%?

如果是第一次接触这个题目的话估计不知道从何下手,本来那种不知道如何下手但是知道之后大呼太简单的题目都说明题目有问题——因为好的问题是应该可以给解题者一个正常的可解决的方案然后可以不断优化解题者的方案的才是好题目,谁优化的最好谁是最佳答案而不是大家连一个正常的可解决方案都没有然后就答案公布之后也没有其他优化的方案。

加一点提示

如果f()方法执行2次有哪些排列组合呢?
0  0      p*p
0  1      p*(1-p)
1  0      (1-p)*p
1  1      (1-p)*(1-p)

排列组合结果出来之后我们发现当出现结果是01和10的时候概率是一样的,均为p*(1-p),我刚开始还在疑惑为什么不管00 11 这两种执行结果,真的是当局者迷——因为题目只要你返回相同的概率并不关心这些执行

public int g(){ 
        while (true){
            int a = f();
            int b = f();
            if(a!=b){
                return a;
            }  
        } 
    }

在这里补充解释一下,g方法只有在a,b两个返回值不一样的时候才会出现,那么ab怎么会两个不一致的呢?
a=0 b=1或者b=0 a=1 这两种情况出现的概率是相等的,所以g返回的结果取决于2种情况(01 10),而这两种情况返回概率是相同的,那么就可以说明g函数返回概率是相同的

最后虽然我弄懂了但是我还是想说这个题目和编程有半毛线关系么???不应该是逻辑思维脑筋急转弯或者概率的知识么???

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值