zoukankan      html  css  js  c++  java
  • 100个黑球和100个白球问题扩展思维

    一个袋子里有100个黑球和100个白球,每次从袋子里面取出两个球扔掉,再放入一个特定颜色的球。

    规则如下:如果取出的两个球颜色相同,则放入袋中一个白球;如果不同,则放入一个黑球。

    问题:最后剩余的一个球的颜色是黑色还是白色?

    方法一:

    黑球◊黑球=白球

    白球◊白球=白球

    黑球◊白球=黑球

    设黑球为1,白球为0:

    1◊1=0

    0◊0=0

    1◊0=1

    则原来的操作抽象为:对100个1和100个0做无序的异或操作。

    则(1^1^...^1)[100] ^(0^0^...^0)[100]简化为 0^0=0。

    故最终剩下白球。

    方法二:

    1)从数量上看,不管怎么操作,每次数量-1,所以最终剩下1个球;

    2)3个原子操作如下:
    A)出2白球,进一个白球;此时增量delta=-1白球
    B)出2个黑球,进一个白球;此时增量delta=-2黑球+1白球
    C)出1个黑球,出1个白球,进一个黑球;此时增量delta=-1白球

     反证法:

    设三个操作进行的次数为x,y,z,且假设最后剩下的是一个黑球,则有:
    100白球+100黑球+x*(-1白球)+y*(-2黑球+1白球)+z*(-1白球)=1黑球
    求得2y=99黑球,y不为整数。矛盾。
    故最终剩下白球。

    方法三:

    整个过程初始状态为:100个黑球和100个白球;

    结合方法二,整个过程有三个原子操作;

    问题即为求最终状态。

    对状态机比较熟的同学可以试试。

    一个小例子,可以看出大家的建模能力以及逆向思维能力。虽然简单,却很经典。

  • 相关阅读:
    Java 的JDBC 数据库连接池实现方法
    在tomcat下context.xml中配置各种数据库连接池
    Eclipse大括号换行显示
    编写.reg文件 导入注册表
    servlet中使用session
    IIS7整合Tomcat6
    TOMCAT数据库连接池的配置方法总结(待续)
    windows2003下iis6.0+tomcat6.0的整合配置
    TransactSQL处理小数
    专案同时使用两种数据库
  • 原文地址:https://www.cnblogs.com/wentfar/p/2670106.html
Copyright © 2011-2022 走看看