帽子游戏分析

题目如下:

有A、B、C三个人,每人戴一顶帽子,帽子上写有一个不为0的数,已知其中有一数为其它二数之和,每个人都可以看见其他人帽子上的数但看不到自己帽子上的数。他们都很聪明不会有失误的推理,他们所说的话均为真话并且会将当时所已经确知的事全部说出来。

A说:“我不知我帽子上的数。”

B说:“我不知我帽子上的数。”

C说:“我不知我帽子上的数。”

A说:“我不知我帽子上的数。”

B说:“我不知我帽子上的数。”

C说:“我不知我帽子上的数。”

A说:“我帽子上的数是34。”

请问:B、C帽子上的数是多少?

n和k,n表示第几次提问时有人猜出来,k表示这个人猜出来的数。例子中n=7,k=34


实例验证

n=7,k=34. A=34,B=13,C=21

n=4,k=20,有三组解B=15,C=5;B=5,C=15;B=8,C=12

n=6,k=144,有5组解:A=108,B=36;A=36,B=108;A=32,B=112;A=64,B=80;A=54,B=90。

初步分析:

不妨设A上的数为x,B上的数为y,C上的数为z。

由题目的条件可得两点信息:

1.x!=0,y!=0,z!=0

2.x=y+z or y=x+z or z=x+y

我们假设发言顺序是依次发言。

  那么当我们仅从条件2推理时可知,自己的数存在两种情况:剩余两数之和或两数之差。自然我们也不能明确自己头上的数,仅当我们利于其它条件排除其中一种情况时我们就能够得出自己头上的答案。

从最简单的三种情况开始分析

1.A第一次就能猜出自己头上的数。

此时A的推理如下 x=y+z or x=|y-z|  由于A为第一个发言那么,他现在知道的条件仅有条件1,那也就是说要通过条件1来排除两种的情况中的一种。显然y+z不能等于0,那么只有y-z=0 所以只有当y=z时A能知道自己的数且x=y+z.即 x=k,y=k/2,z=k/2.

2.B第一次就能猜出自己头上的数。

此时B的推理如下,由于A无法判断出自己头上的数那么可以得出一个条件->,y!=z。y=x+z or y=|x-z|,那也就是说b现在可通过y!=0 or y!=z 来排除自己两种情况中的一种。先通过y!=0,同上->x=z,y=k,x=z=k/2。假设y=z,由于x+z不可能等于z所以只有|x-z|=z,可以得出x=2z,又因为y!=z所有y=x+z &&y=k,x=2k/3,z=k/3.

3.C第一次就能猜出自己头上得数。

  此时C的推理如下,由于A,B无法判断自己头上的数我们可以得出,z!=0 && y!=z && x!=z && x!=2z,同理c现在可以通过这四个条件来排除自己的两种情况中的一种。z=x+y || z=|x-y|                                                            1.不满足z!=0时,z=k,x=y=k/2.                                                                                                                            2.不满足y!=z时,|x-y|=y ->x=2y,z=k,x=2k/3,y=k/3.                                                                                            3.不满足x!=z时,|x-y|=x ->y=2x,z=k,x=k/3,y=2k/3,                                                                                            4.不满足x!=2z时,2|x-y|=x  ->y=x/2,x=2k/3,y=k/3;  ->x=3x/2  x=2k/5,y=3k/5,z=k

算法在构造方程组时要利用行列式来解方程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,771评论 0 2
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 12,947评论 0 13
  • 如图,导航标题栏是一个自定义view,通过点击手势来切换不同的控制器。首先,来看下这个自定义view的实现: 在控...
    ios_stand阅读 3,541评论 0 0
  • · 三哥 回眸烟波处,碧水青山甲秀楼。 古往商贾多少在?悠悠。 白鹭南明依山尽。 体弱万事休,坐断水口思未尽。 天...
    旅行三哥阅读 2,953评论 0 1
  • 一、代码如下 二、使用 验证身份证的正确性 根据身份证号,获取性别 根据身份证号,获取出生日期 根据身份证号,获取年龄
    小母鸡叽叽叽阅读 7,870评论 0 19