1、5.The owner of the green house drinks coffee. 6.The Pall Mall smoker keeps birds. 7.The owner of the yellow house smokes Dunhills. 8.The man in the center house drinks milk. 9.The Norwegian lives in the first house. 10.The Blend smoker has a neighbor who keeps cats. 11.The man who smokes Blue Master
2、s drinks bier. 12.The man who keeps horses lives next to the Dunhill smoker. 13.The German smokes Prince. 14.The Norwegian lives next to the blue house. 15.The Blend smoker has a neighbor who drinks water. The question to be answered is: Who keeps fish?这道迷题出自1981年柏林的德国逻辑思考学院。据说世界上只有2%的人能出答案。就连大名鼎鼎的爱
3、因斯坦也成为此题大伤脑筋,所以这道题也经常被国外知名公司用做面试题目,相信许多朋友都只做出过一个答案,今天就用计算机来看看答案:C#代码(代码来源:tech.ccidnet./art/322/20040304/94061_1.html,在此感原作者):usingSystem;namespacenetsafe.mathpublicclassayst/问题中的所有元素/summarystring,data=黄房子,蓝房子白房子红房子绿房子,挪威人英国人德国人丹麦人瑞典人DUNHILLPRINCE混合烟,PALLMALLBLUEMASTER咖啡矿泉水茶牛奶啤酒鱼恐龙马鸟狗;answer用来存放答案i
4、nt,answernewint6,6;ALL122;intcount1;nLevel0;intListint6;staticvoidMain(stringargs)aystcayst();c.p();/生成全排列到allc.run();Console.Read();按任意键继续run()i1,i2,i3,i4,i5;/通过逻辑条件顺序的有效选择来优化程序for(i1i1120;i1+)/房子/9、挪威人住第一间房子/14、挪威人住在蓝房子旁边/不满足条件就短路if(ALL2,i1!2)continue;(intj5;j+,answerj,1ALLj,i1);(i2i2i2+)/人种2i2)(A
5、LL1,i21)/1、英国人住在红房子里/(find(1,4)find(2,2)/4、绿房子在白房子左边5)find(1,3)(i3i3i3+)/烟3i3)/13、德国人抽PRINCE烟(find(2,3)find(3,/7、黄房子主人抽DUNHILL烟1)(i4i4i4+)/饮料4i4)/8、住在中间那间房子的人喝牛奶(ALL3,i4/5、绿房子主人喝咖啡find(4,/3、丹麦人喝茶/15、抽混合烟的人的邻居喝矿泉水(Math.Abs(find(3,-/12、抽BLUEMASTER烟的人喝啤酒(find(3,5)(i5i5i5+)/宠物5i5)/10、抽混合烟的人住在养鱼人的旁边find(
6、5,/2、瑞典人养了一条狗/6、抽PALLMALL烟的人养了一只鸟4)/11、养马人住在DUNHILL烟的人旁边(Math.Abs(find(5,/能活到这里的data,当然是答案喽write_answer();非常典型的用递归实现排列组合算法。p()nCount,nJudge,key;nLevel+;(nLevel5)writeall();/有一种排列就写到All数组里nLevel-;return;(nCountnCountnCount+)key(nJudgenJudgenJudge+)=ListnJudge)break;(key0)ListnLevelnCount;p();写入all数组w
7、riteall()i;(iii+)ALLi,countListi;count+;find(inti,j)k;(kkk+)(answerk,ireturn-1;将答案打印出来write_answer()j+)Console.Write(datai1,+);Console.WriteLine();运行以后结果是:可以看出答案并不唯一,有许多组合理的答案。还有一种暴力破解的算法C#代码如下(代码来源:System.Collections.Generic;System.Text;爱因斯坦迷题1enum国籍英国,瑞典,丹麦,挪威,德国颜色红,绿,蓝,黄,白宠物鸟,猫,马,鱼,狗饮料水,牛奶,咖啡,茶,香
8、烟blends,blue,prince,dunhill,pallProTableprivateconststringrule1、在一条街上,有5座房子,喷了5种颜色。2、每个房里住着不同国籍的人3、每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物问题是:提示:1、英国人住红色房子2、瑞典人养狗3、丹麦人喝茶4、绿色房子在白色房子左面5、绿色房子主人喝咖啡6、抽PallMall香烟的人养鸟7、黄色房子主人抽Dunhill香烟8、住在中间房子的人喝牛奶9、挪威人住第一间房10、抽Blends香烟的人住在养猫的人隔壁11、养马的人住抽Dunhill香烟的人隔壁12、抽BlueMaster的人喝啤酒13、德国人抽Prince香烟14、挪威人住蓝色房子隔壁15、抽Blends香烟的人有一个喝水的邻居Rulegetrule;T0,颜色,宠物,饮料,N/求排列aidint120,N;ProTable()i0N;i0+)i1+)i0)i2+)|i3+)i4+)aidk,0i0;i1;i2;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1