爱因斯坦谜题解答三种算法比较Word格式文档下载.docx

上传人:b****5 文档编号:19142774 上传时间:2023-01-04 格式:DOCX 页数:29 大小:98.64KB
下载 相关 举报
爱因斯坦谜题解答三种算法比较Word格式文档下载.docx_第1页
第1页 / 共29页
爱因斯坦谜题解答三种算法比较Word格式文档下载.docx_第2页
第2页 / 共29页
爱因斯坦谜题解答三种算法比较Word格式文档下载.docx_第3页
第3页 / 共29页
爱因斯坦谜题解答三种算法比较Word格式文档下载.docx_第4页
第4页 / 共29页
爱因斯坦谜题解答三种算法比较Word格式文档下载.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

爱因斯坦谜题解答三种算法比较Word格式文档下载.docx

《爱因斯坦谜题解答三种算法比较Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《爱因斯坦谜题解答三种算法比较Word格式文档下载.docx(29页珍藏版)》请在冰豆网上搜索。

爱因斯坦谜题解答三种算法比较Word格式文档下载.docx

5.Theownerofthegreenhousedrinkscoffee.

6.ThePallMallsmokerkeepsbirds.

7.TheowneroftheyellowhousesmokesDunhills.

8.Themaninthecenterhousedrinksmilk.

9.TheNorwegianlivesinthefirsthouse.

10.TheBlendsmokerhasaneighborwhokeepscats.

11.ThemanwhosmokesBlueMastersdrinksbier.

12.ThemanwhokeepshorseslivesnexttotheDunhillsmoker.

13.TheGermansmokesPrince.

14.TheNorwegianlivesnexttothebluehouse.

15.TheBlendsmokerhasaneighborwhodrinkswater.

Thequestiontobeansweredis:

Whokeepsfish?

这道迷题出自1981年柏林的德国逻辑思考学院。

据说世界上只有2%的人能出答案。

就连大名鼎鼎的爱因斯坦也成为此题大伤脑筋,所以这道题也经常被国外知名公司用做面试题目,相信许多朋友都只做出过一个答案,今天就用计算机来看看答案:

C#代码(代码来源:

tech.ccidnet./art/322/20040304/94061_1.html,在此感原作者):

using 

System;

namespace 

netsafe.math

{

public 

class 

ayst

/// 

<

summary>

问题中的所有元素

/summary>

string[,] 

data 

{"

黄房子"

"

蓝房子"

白房子"

红房子"

绿房子"

},

挪威人"

英国人"

德国人"

丹麦人"

瑞典人"

DUNHILL"

PRINCE"

混合烟"

 

"

PALL 

MALL"

BLUE 

MASTER"

咖 

啡"

矿泉水"

茶"

牛奶"

啤酒 

鱼"

恐龙"

马"

鸟"

狗"

}

};

answer用来存放答案

int[,] 

answer 

new 

int[6, 

6];

ALL 

122];

int 

count 

1;

nLevel 

0;

int[] 

List 

int[6];

static 

void 

Main(string[] 

args)

ayst 

ayst();

c.p();

///生成全排列到all

c.run();

Console.Read();

按任意键继续

run()

i1, 

i2, 

i3, 

i4, 

i5;

///通过逻辑条件顺序的有效选择来优化程序

for 

(i1 

i1 

120;

i1++)///房子

///9 

、挪威人住第一间房子

///14 

、挪威人住在蓝房子旁边

///不满足条件就短路

if 

(ALL[2, 

i1] 

!

2) 

continue;

(int 

5;

j++, 

answer[j, 

1] 

ALL[j, 

i1]) 

;

(i2 

i2 

i2++)///人种

2] 

i2]) 

(ALL[1, 

i2] 

1) 

///1、 

英国人住在红房子里 

///

(find(1, 

4) 

find(2, 

2)) 

///4 

、绿房子在白房子左边 

5) 

>

find(1, 

3)) 

(i3 

i3 

i3++)///烟

3] 

i3]) 

///13、 

德国人抽PRINCE烟

(find(2, 

3) 

find(3, 

///7 

、黄房子主人抽DUNHILL烟

1)) 

(i4 

i4 

i4++)///饮料

4] 

i4]) 

///8 

、住在中间那间房子的人喝牛奶 

(ALL[3, 

i4] 

///5 

、绿房子主人喝咖啡 

find(4, 

///3 

、丹麦人喝茶 

///15 

、抽混合烟的人的邻居喝矿泉水 

(Math.Abs(find(3, 

///12 

、抽BLUE 

MASTER烟的人喝啤酒

(find(3, 

5)) 

(i5 

i5 

i5++)///宠物

5] 

i5]) 

///10 

、抽混合烟的人住在养鱼人的旁边

find(5, 

///2 

、瑞典人养了一条狗 

///6 

、抽PALL 

MALL烟的人养了一只鸟 

4)) 

///11 

、养马人住在DUNHILL烟的人旁边 

(Math.Abs(find(5, 

///能活到这里的data,当然是答案喽

write_answer();

非常典型的用递归实现排列组合算法。

p()

nCount, 

nJudge, 

key;

nLevel++;

(nLevel 

5)

writeall();

///有一种排列就写到All数组里

nLevel--;

return;

(nCount 

nCount 

nCount++)

key 

(nJudge 

nJudge 

nJudge++)

== 

List[nJudge])

break;

(key 

0)

List[nLevel] 

nCount;

p();

写入all数组

writeall()

i;

(i 

i++)

ALL[i, 

count] 

List[i];

count++;

find(int 

i, 

j)

k;

(k 

k++)

(answer[k, 

i] 

return 

-1;

将答案打印出来

write_answer()

j++)

Console.Write(data[i 

1, 

);

Console.WriteLine();

运行以后结果是:

 

可以看出答案并不唯一,有许多组合理的答案。

还有一种暴力破解的算法

C#代码如下(代码来源:

System.Collections.Generic;

System.Text;

爱因斯坦迷题1

enum 

国籍 

英国, 

瑞典, 

丹麦, 

挪威, 

德国 

颜色 

红, 

绿, 

蓝, 

黄, 

白 

宠物 

鸟, 

猫, 

马, 

鱼, 

狗 

饮料 

水, 

牛奶, 

咖啡, 

茶, 

香烟 

blends, 

blue, 

prince, 

dunhill, 

pall 

ProTable

private 

const 

string 

rule 

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香烟的人有一个喝水的邻居 

Rule 

get 

rule;

0, 

颜色, 

宠物, 

饮料, 

//求排列

aid 

int[120, 

N];

ProTable()

i0 

N;

i0++)

i1++)

i0) 

i2++)

|| 

i3++)

i4++)

aid[k, 

0] 

i0;

i1;

i2;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小学作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1