是有办法的. 核心的问题是,一定要选择一种方式确保如果其他都错了,那么自己一定是对的。要这样做,首先犯人们自己要编好号,按照0-9编号,然后看到其他人的数字的时候,需要根据犯人的号码,以及犯人头上的号码来猜头上的数字。
这个要用到指针的概念. 每个犯人头上的数字,指向具体的犯人,一个个指针连接。例如 1头上是3,那么按照1,3排列,3头上是5 ,则为1,3,5,依次类推。对于任何一个犯人,都可以理出一个环,就是说,最后一个人头上的数字是第一个人。这样对于每个犯人而言,可以看到其他9个人,按照排列可以列出0个环或者几个环。
这里要提出一个图论的理论,也即是说,如果用指针的方式,没有重复的点数字一定在某个环中。只有重复数字的才有可能不在环中。所以方法就变得简单,就是找到所有无法成环的数字,而自己一定是加进去会构成环的人。
现在这个犯人要判断的是,有几个环,自己在哪个环里面。如果所有9个人都被归到每个环里面,那么这个犯人有两种可能,跟某个人重复数字,或者自己是不在的那个数字。这时候要猜的是那个不在的数字。举个例子,如果犯人1看到0,2,3,4,5,6,7,8,9构成了一个或者多个环,那么犯人就选1。这是因为一个环的人,可以不管其他人的号码,来确保环里面一定有人可以猜出来。具体证明可以用递归的方式,比较复杂,这里不再重复了。
现在就看那个不成环的情况怎么处理了,不成环说明自己在那个环里,或者自己就是自己的数字。在环里的人,一定会看到有个人指向自己,但是自己指向谁就不知道了。那么很简单,从指向自己的这个人开始往前推,比如说指向自己的人是3,那么要找到头上数字是3的人,再找有人头上数字是这个人的人,以此往前推,一直推到没有办法推为止。
这个时候,就会有环了,这样自己头上的这个数字就是没有办法往前推的人数字,加上他就应该是个环。
当然,必须要考虑到有重复数字的可能,这个时候的方法就是用重复数字的那个人作为起点,看最后是连接哪个人。这个里面有两种可能,一种是指向自己的重复数字,一种是不指向自己的重复数字,指向自己的重复数字,意味着自己是连接那个环的关键人物,其他人会用来推理,然后估算自己头上的环,这个时候要选择自己,因为这时候有几种可能,一种是自己加进去是个环,一种是自己是个环,如果自己加进去是个环,其他人当中一定有人推理正确。不正确的唯一可能是没有环,而没有环是不可能(根据图论),所以只有一种可能,是自己一个人构成环,也就是说自己头上就是自己的数字。
[ 本帖最后由 dotchen 于 2012-5-17 18:00 编辑 ]