24 12
发新话题
打印

[转帖]爱因斯坦迷题全解析

本主题由 笨巧果 于 2007-3-8 18:19 设置高亮

[转帖]爱因斯坦迷题全解析

爱因斯坦在20世纪初出的这个谜语,他说世界上有98%的人答不出来。你能答出来吗?
1。在一条街上,有5座房子,喷了5种颜色。
2。每个房子里住着不同国籍的人。
3。每个人喝着不同的饮料,抽不同品牌的香烟,养不同的宠物。
问题是:谁养鱼?
提示: 1、英国人住红色房子。  
      2、瑞典人养狗。
      3、丹麦人喝茶。
      4、绿色房子在白色房子左面。
      5、绿色房子主人喝咖啡。
      6、抽pall mall香烟的人养鸟。
      7、黄色房子主人抽dunhill香烟。
      8、住在中间房子的人喝牛奶。
      9、挪威人住第一间房。
      10、抽blends香烟的人住在养猫的人隔壁。
      11、养马的人住抽dunhill香烟的人隔壁。
      12、抽blue master的人喝啤酒。
      13、德国人抽prince香烟。
      14、挪威人住蓝色房子隔壁。
      15、抽blends香烟的人有一个喝水的邻居。
绝大部分人在解这道迷题时,都把条件9所说的挪威人住第一间房,理解为左起第一间;而把条件4绿色房子在白色房子的左面理解为绿色房子是白色房子的左邻;在这样的一个前提下,本迷题成为一个比较简单的推理,只需要稍微花些功夫,就可以推导出一个符合题意的答案。这个答案也就是大家在纷纷显示的答案,但确实很少有人会深入地去想有没有其他地可能。
对条件9而言,挪威人住第一间房,并不一定表示他住左起第一间,也有可能是右起第一间;同样,对条件4而言,绿色房子在白色房子的左面,也不一定表示绿色房子是白色房子的左邻,也有可能在左侧隔着别的房子;这样的话,情况就变得复杂了,所以在深入解题以前,我们有必要认识到这是从英文翻译过来的题目,是不是在翻译过程中,条件有了走样?我们可以上互联网查一下“Einstein's Riddle”,得到的题目是:
There are 5 houses in 5 different colors.
In each house lives a person with a different nationality.
These 5 owners drink a certain drink, smoke a certain brand of cigar, and keep a certain pet.
No owners have the same pet, smoke the same brand of cigar or drink the same drink.
The question is -- WHO OWNS THE FISH?
HINTS:
- the Brit lives in the red house
- the Swede keeps dogs as pets
- the Dane drinks tea
- the green house is on the left of the white house
- the green house owner drinks coffee
- the person who smokes Pall Mall rears birds
- the owner of the yellow house smokes Dunhill
- the man living in the house right in the center drinks milk
- the Norwegian lives in the first house
- the man who smokes blends lives next to the one who keeps cats
- the man who keeps horses lives next to the one who smokes Dunhill
- the owner who smokes Bluemaster drinks beer
- the German smokes prince
- the Norwegian lives next to the blue house
- the man who smokes blends has a neighbor who drinks water.
请注意条件4和条件9,经询问英语国家的朋友,中文翻译没有走样,确实:第一间可以理解为左起,也可以理解为右起;同样,“on the left of”是可以有中间间隔的。(让我觉得惊讶的是,在互联网上查找“Einstein's Riddle”的解答时,几乎所有人都直接采用了左起第一间和绿色房子是白色房子左邻的概念。最后我会就这个问题展开一些讨论)那么,虽然现在条件变得复杂了,但我的兴趣更浓了,在知道“第一间可以理解为左起,也可以理解为右起”和“绿色房子在白色房子的左面,也不一定表示绿色房子是白色房子的左邻,也有可能在左侧隔着别的房子”的前提下,我试着全面地来解一下这个题。解法见上传的另外一个文件。
这样,我们已经分析完全部的可能性,共得到了八个解,他们分别是
1.
房序 1 2 3 4 5
国籍 挪威 德国 瑞典 英国 丹麦
颜色 绿 蓝 白 红 黄
饮料 咖啡 水 牛奶 啤酒 茶
香烟 Pall mall Prince Blends Blue master Dunhill
宠物 鸟 猫 狗 马 金鱼
2.
房序 1 2 3 4 5
国籍 挪威 德国 英国 丹麦 瑞典
颜色 绿 蓝 红 黄 白
饮料 咖啡 水 牛奶 茶 啤酒
香烟 Pall mall Prince Blends Dunhill Blue master
宠物 鸟 猫 马 金鱼 狗
3.
房序 1 2 3 4 5
国籍 挪威 德国 英国 丹麦 瑞典
颜色 绿 蓝 红 黄 白
饮料 咖啡 水 牛奶 茶 啤酒
香烟 Pall mall Prince Blends Dunhill Blue master
宠物 鸟 金鱼 马 猫 狗
4.房序 1 2 3 4 5
国籍 挪威 德国 瑞典 丹麦 英国
颜色 绿 蓝 白 黄 红
饮料 咖啡 水 牛奶 茶 啤酒
香烟 Pall mall Prince Blends Dunhill Blue master
宠物 鸟 猫 狗 金鱼 马
5.
房序 1 2 3 4 5
国籍 挪威 德国 瑞典 丹麦 英国
颜色 绿 蓝 白 黄 红
饮料 咖啡 水 牛奶 茶 啤酒
香烟 Pall mall Prince Blends Dunhill Blue master
宠物 鸟 金鱼 狗 猫 马
6.房序 1 2 3 4 5
国籍 挪威 德国 瑞典 英国 丹麦
颜色 绿 蓝 黄 红 白
饮料 咖啡 水 牛奶 啤酒 茶
香烟 Blends Prince Dunhill Blue master Pall mall
宠物 金鱼 猫 狗 马 鸟
7.房序 1 2 3 4 5
国籍 挪威 丹麦 英国 德国 瑞典
颜色 黄 蓝 红 绿 白
饮料 水 茶 牛奶 咖啡 啤酒
香烟 Dunhill Blends Pall mall Prince Blue master
宠物 猫 马 鸟 金鱼 狗
8.房序 1 2 3 4 5
国籍 德国 瑞典 英国 丹麦 挪威
颜色 绿 白 红 蓝 黄
饮料 咖啡 啤酒 牛奶 茶 水
香烟 Prince Blue master Pall mall Blends Dunhill
宠物 金鱼 狗 鸟 马 猫
答案已经出来了,但我心情却高兴不起来,这是花了我七八个小时才做完的工作;如果在考场上发生,我想我是没有能力把它完整地解答出来的。那么,问题究竟在哪里呢?题目出得不严谨,使得解题的工作量大大地增加了,而且,本来很不错的享受型的推理过程,变成了及其乏味的排列组合题,这恐怕无论如何有失出题人的初衷。
在这个网站上,有很多人都是在职的老师,他们经常会面临出题的压力,有时候稍微不严谨一点,就会犯同样的毛病;所以在出题时养成良好的习惯,自己先多方面多角度地考虑考虑,对提高出题水平会有很大的帮助。
下次如果打算再出“爱因斯坦迷题”时,请千万记住,把条件4改成白色房子左面第一间房子是绿色的,把条件9改为挪威人住左面第一间房。
顺便介绍一下,这个迷题不可能是爱因斯坦在20世纪初出的,因为这里面提到的香烟牌子,blue master香烟1937年才上市,pall mall香烟1939才上市。

TOP

[转帖]爱因斯坦迷题全解析

精神可嘉!
佩服!

TOP

[转帖]爱因斯坦迷题全解析

这题我和数奥组的学生整整解了半天时间,才解决。不过答案好像没有这么多……

TOP

[转帖]爱因斯坦迷题全解析

c# 爱因斯坦 算法 出处 作者:李志勇 发表于赛迪网。 e-mail: netsafe@sina.com 转载请注明出处。 下面的问题相信很多人都听过: 1 有五栋五种颜色的房子 2 每一位房子的主人国籍都不同 3 这五个人每人只喝一种饮料,只抽一种牌子的香烟,只养一种宠物 4 没有人有相同的宠物,抽相同牌子的香烟,喝相同的饮料 提示: 1、 英国人住在红房子里 2 、瑞典人养了一条狗 3 、丹麦人喝茶 4 、绿房子在白房子左边 5 、绿房子主人喝咖啡 6 、抽PALL MALL烟的人养了一只鸟 7 、黄房子主人抽DUNHILL烟 8 、住在中间那间房子的人喝牛奶 9 、挪威人住第一间房子 10 、抽混合烟的人住在养鱼人的旁边 11 、养马人住在DUNHILL烟的人旁边 12 、抽BLUE MASTER烟的人喝啤酒 13、 德国人抽PRINCE烟 14 、挪威人住在蓝房子旁边 15 、抽混合烟的人的邻居喝矿泉水 问题是: 谁养鱼? 这道迷题出自1981年柏林的德国逻辑思考学院。据说世界上只有2%的人能出答案。就连大名鼎鼎的爱因斯坦也成为此题大伤脑筋,所以这道题也经常被国内外知名公司用做面试题目,相信许多朋友都只做出过一个答案,如果碰巧你属于那98%该怎么办呢。没关系,如果这个问题用电脑来解决就非常easy了。 程序代码如下: using System; namespace netsafe.math { public class ayst { /// /// 问题中的所有元素 /// string[,] data= {{"黄房子", "蓝房子", "白房子", "红房子", "绿房子"}, {"挪威人", "英国人", "德国人", "丹麦人", "瑞典人"}, {"DUNHILL", "PRINCE", "混合烟", "PALL MALL", "BLUE MASTER"}, {"咖 啡", "矿泉水", "茶", "牛奶", " 啤酒 "}, {"鱼", " 恐龙", "马", "鸟", "狗"}}; /// /// answer用来存放答案 /// int[,] answer=new int[6, 6]; int[,] ALL=new int[6,122]; int count=1; int nLevel = 0; int[] List=new int[6]; public static void Main(string[] args) { ayst c=new ayst(); c.p(); ///生成全排列到all c.run(); Console.Read(); /// 按任意键继续 } void run() { int i1,i2,i3,i4,i5; ///通过逻辑条件顺序的有效选择来优化程序 for (i1=1;i1<=120;i1++) ///房子 { /// 9 、挪威人住第一间房子 /// 14 、挪威人住在蓝房子旁边 /// 不满足条件就短路 /// if (ALL[2,i1]!=2)continue; for(int j=0;j<5;j++,answer[j,1]=ALL[j,i1]); for (i2=1;i2<=120;i2++) ///人种 { for(int j=0;j<5;j++,answer[j,2]=ALL[j,i2]); /// 9 、挪威人住第一间房子 if (ALL[1,i2]!=1)continue; ///1、 英国人住在红房子里 /// if (find(1,4)!=find(2,2))continue; /// 4 、绿房子在白房子左边 /// if (find(1,5)>find(1,3))continue; for (i3=1;i3<=120;i3++) ///烟 { for(int j=0;j<5;j++,answer[j,3]=ALL[j,i3]); /// 13、 德国人抽PRINCE烟 /// if(find(2,3)!=find(3,2))continue; /// 7 、黄房子主人抽DUNHILL烟 /// if(find(1,1)!=find(3,1))continue; for (i4=1;i4<=120;i4++) ///饮料 { for(int j=0;j<5;j++,answer[j,4]=ALL[j,i4]); /// 8 、住在中间那间房子的人喝牛奶 /// if(ALL[3,i4]!=4)continue; /// 5 、绿房子主人喝咖啡 /// if (find(1,5)!=find(4,1))continue; /// 3 、丹麦人喝茶 /// if(find(2,4)!=find(4,3))continue; /// 15 、抽混合烟的人的邻居喝矿泉水 if(Math.Abs(find(3,3)-find(4,2))!=1)continue; /// 12 、抽BLUE MASTER烟的人喝啤酒 /// if(find(3,5)!=find(4,5))continue; for (i5=1;i5<=120;i5++) ///宠物 { for(int j=0;j<5;j++,answer[j,5]=ALL[j,i5]); /// 10 、抽混合烟的人住在养鱼人的旁边 /// if(Math.Abs(find(3,3)-find(5,1))!=1)continue; /// 2 、瑞典人养了一条狗 /// if(find(2,5)!=find(5,5))continue; /// 6 、抽PALL MALL烟的人养了一只鸟 /// if(find(3,4)!=find(5,4))continue; /// 11 、养马人住在DUNHILL烟的人旁边 /// if(Math.Abs(find(5,3)-find(3,1))!=1)continue; /// ///能活到这里的data,当然是答案喽 /// write_answer(); } } } } } } /// /// 非常典型的用递归实现排列组合算法。 /// public void p() { int nCount,nJudge,key; nLevel++; if(nLevel>5) { writeall();///有一种排列就写到All数组里 nLevel--; return; } for(nCount=1;nCount<=5;nCount++) { key=0; for(nJudge=0;nJudge<=nLevel-1;nJudge++) if(nCount==List[nJudge]) { key=1; break; } if(key==0) { List[nLevel]=nCount; p(); } } nLevel--; } /// /// 写入all数组 /// void writeall() { int i; for (i=1;i<=5;i++) { ALL[i,count]=List; } count++; } int find(int i,int j) { int k; for(k=0;k<=5;k++) { if (answer[k,i]==j) { return k; } } return -1; } /// /// 将答案打印出来 /// void write_answer() { for (int i = 1;i<=5;i++) { for(int j=1 ;j<=5;j++) { Console.Write(data[i-1,answer[j,i]-1]+","); } Console.WriteLine(); } Console.WriteLine(); } } } 说明:程序使用C#,在Microsoft Visual Studio.net下编译执行通过。如果你没有Microsoft Visual C# 需要安装Microsoft(r) .NET Framework SDK ,把上述代码保存到ayst.cs,然后在命令行模式下执行csc ayst.cs ,然后执行ayst.exe也可以。这个程序是很久之前写的。当时只是为了得到答案,所以程序写的比较乱。让同行见笑了。以下是程序的运行结果(答案一总7种,没想到吧): 黄房子,蓝房子,红房子,绿房子,白房子, 挪威人,丹麦人,英国人,德国人,瑞典人, DUNHILL,混合烟,PALL MALL,PRINCE,BLUE MASTER, 矿泉水,茶,牛奶,咖 啡, 啤酒 , 鱼,马,鸟, 恐龙,狗, 绿房子,蓝房子,黄房子,红房子,白房子, 挪威人,德国人,瑞典人,英国人,丹麦人, 混合烟,PRINCE,DUNHILL,BLUE MASTER,PALL MALL, 咖 啡,矿泉水,牛奶, 啤酒 ,茶, 恐龙,鱼,狗,马,鸟, 绿房子,蓝房子,白房子,黄房子,红房子, 挪威人,德国人,瑞典人,丹麦人,英国人, PALL MALL,PRINCE,混合烟,DUNHILL,BLUE MASTER, 咖 啡,矿泉水,牛奶,茶, 啤酒 , 鸟,鱼,狗, 恐龙,马, 绿房子,蓝房子,白房子,黄房子,红房子, 挪威人,德国人,瑞典人,丹麦人,英国人, PALL MALL,PRINCE,混合烟,DUNHILL,BLUE MASTER, 咖 啡,矿泉水,牛奶,茶, 啤酒 , 鸟, 恐龙,狗,鱼,马, 绿房子,蓝房子,白房子,红房子,黄房子, 挪威人,德国人,瑞典人,英国人,丹麦人, PALL MALL,PRINCE,混合烟,BLUE MASTER,DUNHILL, 咖 啡,矿泉水,牛奶, 啤酒 ,茶, 鸟,鱼,狗,马, 恐龙, 绿房子,蓝房子,红房子,黄房子,白房子, 挪威人,德国人,英国人,丹麦人,瑞典人, PALL MALL,PRINCE,混合烟,DUNHILL,BLUE MASTER, 咖 啡,矿泉水,牛奶,茶, 啤酒 , 鸟,鱼,马, 恐龙,狗, 绿房子,蓝房子,红房子,黄房子,白房子, 挪威人,德国人,英国人,丹麦人,瑞典人, PALL MALL,PRINCE,混合烟,DUNHILL,BLUE MASTER, 咖 啡,矿泉水,牛奶,茶, 啤酒 , 鸟, 恐龙,马,鱼,狗, 作者Blog:http://blog.csdn.net/hadelu/

TOP

回复 #1 春苗 的帖子

没那么严重吧,我记得也是两年多前,这一题我在出给我的学生做时,大约二十多分钟他们就做出来了呀。不过不是考试,气氛比较轻松。
与这一起的还有一道《年薪八万美元的智力题》现在也发给你看看吧。
年薪8万美金的智力题据统计,在美国,在20分钟内能回答出这道题的人,平均年薪在8万美金以上;题目如下:
五个海盗得到了100颗宝石,每颗都价值连城。他们决定这么分:
1)        抽签决定自己的号码(1、2、3、4、5)
2)        首先,由1号提出分配方案,然后5人进行表决;只有超过半数的人同意时;才能按照他的提案进行分配,否则将被扔人大海喂鲨鱼。
3)        如果1号死后;再由2号提出分配方案,然后大家4人进行表决,超过半数人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼
4)        以次类推
    条件:每个海盗都很聪明,都能很理智地判断得失,从而做出选择。
    问题:第一个海盗提出怎样的分配方案才能够使自己的收益最大化。
提示:数学逻辑有时会导致看来十分怪异的结论。一般规则是,如果逻辑推理没有漏洞,那么结论就必定站得住脚,即使它与你的直觉矛盾。

TOP

早知道我去美国好了,遗

TOP

那么这题你的答案是…………?

TOP

回复 #8 几点 的帖子

坛上有很多这问题的帖子了
97,0,1,2,0
或者97,0,1,0,2

TOP

应该是100,0,0,0,0

TOP

这些题目我用编程都能解出来,10分钟

TOP

那我给你道题你试试?

1.甲乙两地之间有一座山,上下坡和平路共46 km,某人从甲地到乙地要用9小时,由乙返回甲地要用8小时54分,已知平路每小时行6 km,上坡每小时行4 km,下坡每小时行5 km,求从甲地到乙地的上坡路共有多少千米?

TOP

回复 #11 几点 的帖子

算出个比例,再根据往返的时间总和进行分配,能行吗?
星多天空亮,人多智慧广! 海内存知己,天涯若比邻!星多天空亮,人多智慧广!  海内存知己,天涯若比邻!

TOP

回复 #9 几点 的帖子

能推推你的理吗
星多天空亮,人多智慧广! 海内存知己,天涯若比邻!星多天空亮,人多智慧广!  海内存知己,天涯若比邻!

TOP

引用:
原帖由 几点 于 2007-3-12 00:14 发表
应该是100,0,0,0,0
这种分法是超过一半人同意(5号、3号、1号),但1号吃亏了。
三人行,必有吾师
我的博客http://my.hersp.com/600131/portal.aspx

TOP

回复 #14 海南客 的帖子

100个还吃亏?
谁是1号?
为什么这三个会同意?

TOP

回复 #15 dxg 的帖子

应该是100,0,0,0,0

是按5、4、3、2、1排吧?你(指1号)提出方案全给自己,会超过一半人同意?2、4、5号一定不会同意的。

按我的理解重排:
1号:0
2号:0
3号:0
4号:0
5号:100

1号提的方案,自己肯定同意。5号全部得到也同意。
3号想;4号、5号是绝不会给我提方案。否则可能他一个都没有。如果2号提的方案他们能有一个也就同意了。因为2号很聪明,他肯定会分别给4号和5号最少一个。所以3号没机会提方案。所以对于1号的方案同意或不同意都无所谓。

所以我认为3号也可以同意。

[ 本帖最后由 海南客 于 2007-3-14 11:33 编辑 ]
三人行,必有吾师
我的博客http://my.hersp.com/600131/portal.aspx

TOP

回复 #16 海南客 的帖子

如果1号自己98个,4号、5号各一个。这两人也会同意的。照8楼的分法,也会超过半数人同意。

[ 本帖最后由 海南客 于 2007-3-14 00:50 编辑 ]
三人行,必有吾师
我的博客http://my.hersp.com/600131/portal.aspx

TOP

回复 #17 海南客 的帖子

我从来没提出方案全给自己。
你这个方案,一号不要了,怎么体现尽可能多的得到最大收益?
4号5号杀掉1号也可以获得两个,为什么一定要同意呢?可以选择不同意。
还有这个问题少了一个条件就是不提方案的人尽可能的多杀人,提方案的尽可能不死。
你的方案成了提方案的人得到的最少还要被杀死,可以说是个足够不聪明的方案了。
-----------------------------------------------------------------------------------------
下面是这个问题的思路:用逆推方法
一、假设1、2、3号都死了,只剩下4、5号,那么4号无论怎么提方案,5号都会不同意而杀死4号,独得宝石。因此为了不死,3号无论提什么方案,4号必须同意,所以如果1、2号死了,三号可以提一个自己独吞100的方案而得到超过半数的同意票。
二、2号聪明,可以洞察他死后三号的方案,因此他就是全部给3号,三号也不会同意他,所以他只能放弃三号的投票,而给4、5号各一个,4、5号知道2号死了,他们将什么都得不到,就一定会同意2号的98、0、1、1的方案。
三、1号聪明,可以洞察2号的98、0、1、1的方案,同样他放弃2号,给3号一个,4、5号其中一个人2个。就可以得到三票。
因此最终一号的分配方案是我在上面说过的方案。

TOP

回复 #18 dxg 的帖子

你说的没错。照你在8楼的方案是完全可行的。本题就是比原题少了一个条件:不提方案的人会尽可能多杀人。

我在17楼1号是有98个。

不知是我没说明白,还是你看错了。我是说几点老师说的方案:100、0、0、0、0。(16楼的第二人称是对此方案说的。)

[ 本帖最后由 海南客 于 2007-3-14 11:32 编辑 ]
三人行,必有吾师
我的博客http://my.hersp.com/600131/portal.aspx

TOP

回复 #19 海南客 的帖子

即使缺少了那个条件17楼的要98颗的方案也不可行。
这样分配,2号反对无疑了、3-5号都是投什么都无所谓,这是什么概念阿?就是说3-5号都有1半的可能投反对,1号要冒着被杀掉的危险去公布这么个方案。只多了一个珠子,却有一半的可能被杀掉,我想不是明智的分配方案。
若真要98颗,应该给3号一颗,就一定能争取到3号这一票,另外一颗随便给4、5号某人,得不到的必然反对,得到一颗的仍然是无所谓的状态。1号仍可能被杀掉,他要这样分配一定是不够聪明。

TOP

 24 12
发新话题