zoukankan      html  css  js  c++  java
  • 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只狗

    所以结论成立。

  • 相关阅读:
    回调函数 协程
    网络编程 之线程
    并发编程 之进程相关
    并发编程的理论 python中实现多进程
    基于tcp的粘包处理终极版本
    基于socket的网络编程
    数据分析
    zabbix从入门到放弃
    Linux
    Django
  • 原文地址:https://www.cnblogs.com/cherri/p/1863988.html
Copyright © 2011-2022 走看看