zoukankan      html  css  js  c++  java
  • 桶中取黑白球问题

    桶中有n个黑球,n个白球,取球规则如下:每次从桶中取两个球,如果两球同色,则放回一个黑球,否则放回一个白球。

    问:最后桶中剩下一个黑球的概率是多大?

    分析取球的规则,每次取完球之后,黑球的数量要么增1,要么减1,白球的数量要么不变,要么减2。

    如果说桶中只剩下一个球,鉴于白球的递减是以2为倍数,所以,当n为奇数时,桶中剩下的一定是白球,当n为偶数时,桶中剩下的一定是黑球。

    编程之美中,作者提出了用异或的数学逻辑来模拟取球的过程,黑球看作是0,白球看作是1,这样的话,取球规则就相当于把取出的数字异或之后再把结果丢回去。

    0 XOR 0 =0

    1 XOR 1 =0

    0 XOR 1 =1

    这样以来,每次取完数字之后,所有数字的异或的结果是不变的,要么是0,要么是1。当1的个数为奇数时,奇数个1的异或结果是1,偶数个1的异或结果为0,0的个数不影响异或结果。

    所以,把1和白球对应起来,得出的结论是当有奇数个白球时,桶中剩下的一个一定是白球,当白球的个数为偶数时,桶中剩下的一个一定是黑球。

    note:编程之美中的问题中给出的n为100,我们很容易就从100个黑白球从头开始分析,想着怎么样模拟取球的过程,能够递归到桶中只剩一个黑球的情形,然后陷入到复杂的穷举当中去,

    我刚开始就是这么干的,搞了一个下午,还写了个程序去跑,结果是程序没跑出结果来,原因是穷举的规模太大了,当n为100的时候,穷举的规模大概为3199

    so,一开始就应该有个正确的思路,考虑穷举是不可行的,应该从取球的规则中挖掘规律,原来,就这么简单,吼啊x。

  • 相关阅读:
    Burp-Intruder的四种枚举方式
    360众测
    PHP_Code_Challenge-15-file_get/put_contents
    PHP_Code_Challenge-14-文件包含+php伪协议利用
    PHP_Code_Challenge-10-进制转换绕过弱类型比较
    PHP_Code_Challenge-8-无数字字母的webshell
    PHP_Code_Challenge-7-$$变量覆盖
    转发一位师傅的思考及经验&也是对自己的提醒
    PHP_Code_Challenge-6-SQL注入&Union
    三月反思四月计划
  • 原文地址:https://www.cnblogs.com/un4sure/p/2384265.html
Copyright © 2011-2022 走看看