MyTFLS社区
爱因斯坦的问题,他说全世界有98%的人做不出来! - 打印版本

+- MyTFLS社区 (https://community.mytfls.com)
+-- 论坛: MyTFLS专区 (https://community.mytfls.com/forum-6.html)
+--- 论坛: 休闲俱乐部 (https://community.mytfls.com/forum-37.html)
+--- 主题: 爱因斯坦的问题,他说全世界有98%的人做不出来! (/thread-8681.html)

页: 1 2


爱因斯坦的问题,他说全世界有98%的人做不出来! - cool.44 - 2005-7-28

爱因斯坦在20世纪初出的这个谜语,题目是这样的:
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香烟的人有一个喝水的邻居

问题是:谁养鱼?


- 秋天的落叶 - 2005-7-29

原来看过这个题,可惜忘了答案了


- 叱咤风云№ - 2005-7-29

见好多次了
不过每次想也都挺搁撂的


- 鹤冲天 - 2005-7-29

肯做就能做出来
极简单
就是多次重复简易推理


- yanxiang - 2005-7-29

不會吧,妳們很有耐心?


- 大花狗上树 - 2005-7-29

我懒得想,写个程序让电脑自己捉么。

挪威 丹麦 英国 德国 瑞典
黄色 蓝色 红色 绿色 白色
养猫 养马 养鸟 养鱼 养狗
喝水 喝茶 牛奶 咖啡 啤酒
Dunhill Belends Pall Mall Prince Blue Master


- 叱咤风云№ - 2005-7-29


用电脑怎么弄了


- 大花狗上树 - 2005-7-29

Dim country() As String = {"挪威", "英国", "瑞典", "德国", "丹麦"}
Dim color() As String = {"蓝色", "绿色", "红色", "白色", "黄色"}
Dim pet() As String = {"马", "狗", "鸟", "猫", "鱼"}
Dim drink() As String = {"牛奶", "咖啡", "茶", "水", "啤酒"}
Dim cig() As String = {"Dunhill", "Pall Mall", "Blends", "Blue Master", "Prince"}

Function getidx(ByVal one_array() As String, ByVal cont As String) As Integer
Dim index, id As Integer
For index = 0 To 4
If one_array(index) = cont Then
id = index
End If
Next
Return id
End Function

Function pd(ByVal country() As String, ByVal color() As String, ByVal pet() As String, ByVal drink() As String, ByVal cig() As String) As Integer

Dim g As Integer

g = 0

'1、英国人住红色房子
If getidx(country, "英国") = getidx(color, "红色") Then
g = g + 1
End If

'2、瑞典人养狗
If getidx(country, "瑞典") = getidx(pet, "狗") Then
g = g + 1
End If

'3、丹麦人喝茶
If getidx(country, "丹麦") = getidx(drink, "茶") Then
g = g + 1
End If

'4、绿色房子在白色房子左面
If getidx(color, "白色") <> 0 Then
If getidx(color, "绿色") = getidx(color, "白色") - 1 Then
g = g + 1
End If
End If

'5、绿色房子主人喝咖啡
If getidx(color, "绿色") = getidx(drink, "咖啡") Then
g = g + 1
End If

'6、抽Pall Mall香烟的人养鸟
If getidx(cig, "Pall Mall") = getidx(pet, "鸟") Then
g = g + 1
End If

'7、黄色房子主人抽Dunhill香烟
If getidx(color, "黄色") = getidx(cig, "Dunhill") Then
g = g + 1
End If

'8、住在中间房子的人喝牛奶
If drink(2) = "牛奶" Then
g = g + 1
End If

'9、挪威人住第一间房
If country(0) = "挪威" Then
g = g + 1
End If

'10、抽Blends香烟的人住在养猫的人隔壁
If getidx(pet, "猫") <> 4 Then
If getidx(cig, "Blends") = getidx(pet, "猫") + 1 Then
g = g + 1
End If
Else
If getidx(pet, "猫") <> 0 Then
If getidx(cig, "Blends") = getidx(pet, "猫") - 1 Then
g = g + 1
End If
End If
End If

'11、养马的人住在抽Dunhill香烟的人隔壁
If getidx(cig, "Dunhill") <> 4 Then
If getidx(pet, "马") = getidx(cig, "Dunhill") + 1 Then
g = g + 1
End If
Else
If getidx(cig, "Dunhill") <> 0 Then
If getidx(pet, "马") = getidx(cig, "Dunhill") - 1 Then
g = g + 1
End If
End If
End If

'12、抽Blue Master的人喝啤酒
If getidx(cig, "Blue Master") = getidx(drink, "啤酒") Then
g = g + 1
End If

'13、德国人抽Prince香烟
If getidx(country, "德国") = getidx(cig, "Prince") Then
g = g + 1
End If

'14、挪威人住蓝色房子隔壁
If color(1) = "蓝色" Then
g = g + 1
End If

'15、抽Blends香烟的人有一个喝水的邻居
If getidx(drink, "水") <> 4 Then
If getidx(cig, "Blends") = getidx(drink, "水") + 1 Then
g = g + 1
End If
Else
If getidx(drink, "水") <> 0 Then
If getidx(cig, "Blends") = getidx(drink, "水") - 1 Then
g = g + 1
End If
End If
End If

If g = 15 Then
Return g
Else
Return 0
End If
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a, b, c, d, f, id As Integer
Dim aa(5), bb(5), cc(5), dd(5), ff(5) As String
Dim aaa(6, 5) As String
Dim bbb(6, 5) As String
Dim ccc(24, 5) As String
Dim ddd(12, 5) As String
Dim fff(24, 5) As String

id = 0
a = 1000
b = 2000
c = 3000
d = 4000
f = 5000

For b = 2 To 4
'For c = 1 To 4
For d = 2 To 4
For f = 2 To 4
If a <> b And a <> c And a <> d And a <> f And b <> c And b <> d And b <> f And c <> d And c <> f And d <> f Then
aaa(id, 0) = country(0)
aaa(id, 1) = country(b)
aaa(id, 2) = country(1)
aaa(id, 3) = country(d)
aaa(id, 4) = country(f)
id = id + 1
End If
Next
Next
'Next
Next

id = 0
a = 1000
b = 2000
c = 3000
d = 4000
f = 5000
For a = 2 To 4
'For b = 0 To 4
For c = 2 To 4
For d = 1 To 4
For f = 2 To 4
If a <> b And a <> c And a <> d And a <> f And b <> c And b <> d And b <> f And c <> d And c <> f And d <> f Then
bbb(id, 0) = color(a)
bbb(id, 1) = color(0)
bbb(id, 2) = color©
bbb(id, 3) = color(d)
bbb(id, 4) = color(f)
id = id + 1
End If
Next
Next
Next
'Next
Next

id = 0
a = 1000
b = 2000
c = 3000
d = 4000
f = 5000
For a = 1 To 4
'For b = 0 To 4
For c = 1 To 4
For d = 1 To 4
For f = 1 To 4
If a <> b And a <> c And a <> d And a <> f And b <> c And b <> d And b <> f And c <> d And c <> f And d <> f Then
ccc(id, 0) = pet(a)
ccc(id, 1) = "马"
ccc(id, 2) = pet©
ccc(id, 3) = pet(d)
ccc(id, 4) = pet(f)
id = id + 1
End If
Next
Next
Next
'Next
Next

id = 0
a = 1000
b = 2000
c = 3000
d = 4000
f = 5000
For a = 1 To 4
For b = 2 To 4
'For c = 0 To 4
For d = 1 To 4
For f = 2 To 4
If a <> b And a <> c And a <> d And a <> f And b <> c And b <> d And b <> f And c <> d And c <> f And d <> f Then
ddd(id, 0) = drink(a)
ddd(id, 1) = drink(b)
ddd(id, 2) = drink(0)
ddd(id, 3) = drink(d)
ddd(id, 4) = drink(f)
id = id + 1
End If
'Next
Next
Next
Next
Next

id = 0
a = 1000
b = 2000
c = 3000
d = 4000
f = 5000
For b = 1 To 4
For c = 1 To 4
For d = 1 To 4
For f = 1 To 4
If a <> b And a <> c And a <> d And a <> f And b <> c And b <> d And b <> f And c <> d And c <> f And d <> f Then
fff(id, 0) = "Dunhill"
fff(id, 1) = cig(b)
fff(id, 2) = cig©
fff(id, 3) = cig(d)
fff(id, 4) = cig(f)
id = id + 1
End If
Next
Next
Next
Next

For a = 0 To 5
'For b = 0 To 5
For c = 0 To 23
For d = 0 To 11
For f = 0 To 23
aa(0) = "挪威"
aa(1) = aaa(a, 1)
aa(2) = "英国"
aa(3) = aaa(a, 3)
aa(4) = aaa(a, 4)

bb(0) = "黄色" 'bbb(b, 0)
bb(1) = "蓝色" 'bbb(b, 1)
bb(2) = "红色" 'bbb(b, 2)
bb(3) = "绿色" 'bbb(b, 3)
bb(4) = "白色" 'bbb(b, 4)

cc(0) = ccc(c, 0)
cc(1) = ccc(c, 1)
cc(2) = ccc(c, 2)
cc(3) = ccc(c, 3)
cc(4) = ccc(c, 4)

dd(0) = ddd(d, 0)
dd(1) = ddd(d, 1)
dd(2) = ddd(d, 2)
dd(3) = ddd(d, 3)
dd(4) = ddd(d, 4)

ff(0) = fff(f, 0)
ff(1) = fff(f, 1)
ff(2) = fff(f, 2)
ff(3) = fff(f, 3)
ff(4) = fff(f, 4)
If pd(aa, bb, cc, dd, ff) = 15 Then
ListBox1.Items.Add(aa(0) + " " + aa(1) + " " + aa(2) + " " + aa(3) + " " + aa(4))
ListBox1.Items.Add(bb(0) + " " + bb(1) + " " + bb(2) + " " + bb(3) + " " + bb(4))
ListBox1.Items.Add(cc(0) + " " + cc(1) + " " + cc(2) + " " + cc(3) + " " + cc(4))
ListBox1.Items.Add(dd(0) + " " + dd(1) + " " + dd(2) + " " + dd(3) + " " + dd(4))
ListBox1.Items.Add(ff(0) + " " + ff(1) + " " + ff(2) + " " + ff(3) + " " + ff(4))
Exit Sub
End If
Next
Next
Next
'Next
Next
End Sub
End Class

这个是个笨办法,用递归速度会更快。


- 因我存在的明天 - 2005-7-29

高手就是高手...


- 适度深蓝 - 2005-7-29

强就一个字,强到外婆桥。。。。