• IBM打狗问题


      一个大院子里住了50户人家,每家都养了一条狗,有一天他们接到通知说院子里有狗生病了,并要求所有主人在发现自己家狗生病的当天就要把狗枪杀掉。然而所有主人和他们的狗都不能够离开自己的房子,主人与主人之间也不能通过任何方式进行沟通,他们能做的只是通过窗户观察别人家的狗是否生病从而推断自己的狗病否。(就是说,每个主人只能看出其他49家的狗是不是生病,单单没法看出而只能是根据逻辑推断出自己的狗是不是生病)   
        
      第一天没有枪声,第二天还是没有枪声,第10天传出一阵枪声,问有多少条狗被枪杀


    假设第一天枪响,那么只有一条病狗,自己没有发现病狗,那么病狗一定是自己的,但是第一天没有枪响,所以
    病狗不止一条。sickDog>=2
    假设,已知第一天枪没有响而第二天枪响,自己只看到一只病狗,但是那个人居然没有杀死自己那条狗,那么自
    己这条狗就是病狗,但是第二天依然没有枪响,所以作为“我”至少看到两条病狗sickDog>=3

    结论:当你数到的病狗数比日子少一时,则会枪杀自己的狗,并且被杀死的狗的数目是日子数。
    即,第n天传出枪声,则打死n只狗。

    证明过程:
    数学归纳法:
    1. 当第一天传出枪声,则打死1只狗,显然,第一天,当“我”没有发现病狗时,但是又知道存在病狗,那么可以肯定自己的狗就是病狗,又知,如果第一天没有枪声,那么病狗数大于1只


    2. 现假设,前n-2天没有传出枪声而第n-1天传出枪声,那么打死n-1只狗,并且,如果前n-1天没有枪声,那么病狗数大于n-1只


    3. 那么,有上述假设易知,第n天,“我”如果发现n-1只病狗,但是并且没有枪声,基于假设中的结论:“如果前n-1天没有枪声,那么病狗数大于n-1只”,则可以肯定自己的狗也是病狗,这时则会枪杀自己的狗,即一共被打死n只狗

    所以结论成立。

  • 相关阅读:
    http 请求包含哪几个部分(请求行、请求头、请求体)
    BUG处理流程说明
    如何正确分析定位BUG
    如何定位bug是前端还是后端以及用的工具
    测试阶段划分为哪几个阶段?
    java实现一个简单的图书管理系统
    sql增、删、改、查基础封装类
    Ubuntu18.04 install sougou pinyin
    tensorboard网页打不开问题
    c++11 实现numpy argmax argmin
  • 原文地址:https://www.cnblogs.com/cherri/p/1863988.html
Copyright © 2020-2023  润新知