爱因斯坦在20世纪初出的这个谜语。他说世界上有98%的人答不出来。(不知道是真的假的
![](images/smilies/lol.gif)
)
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香烟的人有一个喝水的邻居
多年以前曾在电脑报上看到过这个题目,下午上网无聊时在橙子的BLOG上又发现了这个题目
http://hi.baidu.com/rarnu/blog/item/e53883d6463be92807088b9b.html
就开玩笑的让他用delphi写个程序推理下,没想到一会就有了结果
![](images/smilies/sweat.gif)
program PrjEinstein;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
fData: array[0..4] of string = ('国家','房子','宠物','饮料','香烟');
var
fCountry: array[1..5] of string = ('','','','','');
fHouseColor: array[1..5] of string = ('','','','','');
fPet: array[1..5] of string = ('','','','','');
fDrink: array[1..5] of string = ('','','','','');
fSmoke: array[1..5] of string = ('','','','','');
var
i, j, k, l, m, n, o, p, q, r, s, t: Integer;
A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12: boolean;
begin
for i := 1 to 5 do
begin
for j := 1 to 5 do
begin
for k := 1 to 5 do
begin
for l := 1 to 5 do
begin
for m := 1 to 5 do
begin
for n := 1 to 5 do
begin
for o := 1 to 5 do
begin
A1 := (i<>1) and (i<>2); // (1)
A2 := (j<>1) and (j<>i); // (2)
A3 := (k>3) and (k<>i); // (4,5)
A4 := (l<>1) and (l<>3) and (l<>i) and (l<>j) and (l<>k); // (3)
A5 := (m<>j); // (6)
A6 := (n<>2) and (n<>i) and (n<>k) and (n<>m); // (7)
A7 := (o<>3) and (o<>k) and (o<>l) and (o<>m) and (o<>n); // (12)
if A1 and A2 and A3 and A4 and A5 and A6 and A7 then
begin
p := 15-1-i-j-l; // (13)
q := 15-m-n-o-p; // (10)
A8 := (p<>1) and (p<>i) and (p<>j) and (p<>l) and (p<>m) and (p<>n) and (p<>o); // (13)
A9 := (q<>m) and (q<>n) and (q<>o) and (q<>p); // (10)
if A8 and A9 then
begin
if (q>1) and ((q-1)<>j) and ((q-1)<>m) then
begin
fPet[q-1] := '猫';
if (n>1) and ((n-1)<>j) and ((n-1)<>m) then
begin
fPet[n-1] := '马';
t := 15-(q-1)-(n-1)-j-m;
fPet[t] := '鱼';
end
else
begin
fPet[n+1] := '马';
t := 15-(q-1)-(n+1)-j-m;
fPet[t] := '鱼';
end;
end
else
begin
fPet[q+1] := '猫';
if (n>1) and ((n-1)<>j) and ((n-1)<>m) then
begin
fPet[n-1] := '马';
t := 15-(q+1)-(n-1)-j-m;
fPet[t] := '鱼';
end
else
begin
fPet[n+1] := '马';
t := 15-(q+1)-(n+1)-j-m;
fPet[t] := '鱼';
end;
end;
if (q>1) and ((q-1)<>3) and ((q-1)<>k) and ((q-1)<>l) and ((q-1)<>o) then // (15)
fDrink[q-1] := '矿泉水'
else if (q<5) and ((q+1)<>3) and ((q+1)<>k) and ((q+1)<>l) and ((q+1)<>o) then // (11)
fDrink[q+1] := '矿泉水';
if (((q>1) and ((q-1)<>j) and ((q-1)<>m)) or ((q<5) and ((q+1)<>j) and ((q+1)<>m))) then // (10)
begin
if(((q>1) and ((q-1)<>3) and ((q-1)<>k) and ((q-1)<>l) and ((q-1)<>o)) or ((q<5) and ((q+1)<>3) and ((q+1)<>k) and ((q+1)<>l) and ((q+1)<>o))) then // (15)
begin
if(((n>1) and ((n-1)<>j) and ((n-1)<>m)) or ((n<5) and ((n+1)<>j) and ((n+1)<>m))) then // (11)
begin
fCountry
:= '英国'; // (1)
fHouseColor := '红色';
fCountry[j] := '瑞典'; // (2)
fPet[j] := '狗';
fHouseColor[k] := '绿色'; // (4)
fHouseColor[k-1] := '白色';
fDrink[k] := '咖啡'; // (5)
fCountry[l] := '丹麦'; // (3)
fDrink[l] := '茶';
fSmoke[m] := 'PallMall'; // (6)
fPet[m] := '鸟';
fHouseColor[n] := '黄色'; // (7)
fSmoke[n] := 'Dunhill';
fSmoke[o] := 'BlueMaster'; // (12)
fDrink[o] := '啤酒';
fCountry[p] := '德国'; // (13)
fSmoke[p] := 'Prince';
fSmoke[q] := 'Blends'; // (10)
fCountry[1] := '挪威'; // (9)
fHouseColor[2] := '蓝色'; // (14)
fDrink[3] := '牛奶'; // (8)
for r := 0 to 4 do
begin
Write(Format('%12s',[fData[r]]));
end;
WriteLn(#13#10);
for s := 1 to 5 do
begin
Write(Format('%12s',[fCountry[s]]));
Write(Format('%12s',[fHouseColor[s]]));
Write(Format('%12s',[fPet[s]]));
Write(Format('%12s',[fDrink[s]]));
Write(Format('%16s',[fSmoke[s]]));
Write(#13#10);
end;
ReadLn;
Exit;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end.