`
xiejin2008
  • 浏览: 123680 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

测试你逻辑推理能力(1)..猜猜谁是鼓手!

    博客分类:
  • Work
阅读更多

程序员,固然需要很强的逻辑能力.所以找到一些很有意思的逻辑推理题,练习练习,学会更多的思维方式.来解决各类问题.

 

  《鼓    手》
  
有两位女士,阿琳和谢里尔,有两位男士,伯顿和唐纳德,他们都是音
乐家。一位是钢琴手,另一位是小提琴手,第三位是长笛手,第四位是鼓手。
有一天他们围着方桌而坐:
(1)坐在伯顿对面的是钢琴手。
(2)坐在唐纳德对面的不是长笛手。
(3)坐在阿琳左侧的是小提琴手。
(4)坐在谢里尔左侧的不是鼓手。
(5)长笛手与鼓手是夫妻。
谁是鼓手?
  
提示:按姓名给出这四人的各种可能的坐法。然后确定可以把哪些音乐
专长分配给哪些人而不会与任何陈述发生矛盾。

分享到:
评论
13 楼 Solstice 2009-12-13  
对,ABCD四个人坐方桌只有6种情况,然后用后面的条件一排除,就只剩一种了。

火星来客 写道
没有代码,直接笔算,3分钟

12 楼 火星来客 2009-12-11  
java.lang.Object 写道
            唐纳德(小提琴手)
阿琳(钢琴手)                 伯顿(长笛)
             谢里尔(鼓手)




用JAVA算了半天终于算出来了

没有代码,直接笔算,3分钟


liyun_1981 写道
你们都搞错了,只有伯顿才是鼓手!

把你的答案全贴出来看看撒
11 楼 liyun_1981 2009-12-11  
你们都搞错了,只有伯顿才是鼓手!
10 楼 xiejin2008 2009-08-14  
呵呵,真相只有一个: 鼓手是谢里尔
9 楼 comeonbabye 2009-08-14  
牛X,第一次用JAVA来算。算了我好久,终于算出来了。
8 楼 java.lang.Object 2009-08-12  
是啊,这就是差距啊,我看了你的haskell,还特意去下载了一个haskell来看一看,以前听都没有听过这个语言。真是孤陋寡闻啊。
受教了,呵呵。
7 楼 Magicloud 2009-08-12  
汗,我用haskell算也就是一眨眼的事……
6 楼 java.lang.Object 2009-08-12  
            唐纳德(小提琴手)
阿琳(钢琴手)                 伯顿(长笛)
             谢里尔(鼓手)




用JAVA算了半天终于算出来了
5 楼 Magicloud 2009-08-06  
whirlwind 写道
           唐纳德(小提琴手)
伯顿(长笛手)                 阿琳(鼓手)
             谢里尔(钢琴手)

人家第一个条件:伯顿对面是钢琴手……
4 楼 Magicloud 2009-08-06  
[(BD,Male,Flute),(XLE,Female,Drum),(AL,Female,Piano),(TND,Male,Violin)]
import Data.List

data Sex = Male
         | Female
           deriving (Show)
data People = AL
            | XLE
            | BD
            | TND
              deriving (Show)
data Major = Piano
           | Violin
           | Flute
           | Drum
             deriving (Eq, Show)

condition1 [ (BD, _, _), _, (_, _, Piano), _ ] = True
condition1 _ = False

condition2 [ _, (TND, _, _), _, (_, _, Flute) ] = False
condition2 [ (_, _, Flute), _, (TND, _, _), _ ] = False
condition2 [ _, (_, _, Flute), _, (TND, _, _) ] = False
condition2 _ = True

condition3 [ _, (AL, _, _), (_, _, Violin), _ ] = True
condition3 [ _, _, (AL, _, _), (_, _, Violin) ] = True
condition3 [ (_, _, Violin), _, _, (AL, _, _) ] = True
condition3 _ = False

condition4 [ _, (XLE, _, _), (_, _, Drum), _ ] = False
condition4 [ _, _, (XLE, _, _), (_, _, Drum) ] = False
condition4 [ (_, _, Drum), _, _, (XLE, _, _) ] = False
condition4 _ = True

condition5 a = case (filter (\ (_, _, m) ->
                               m == Drum || m == Flute
                            ) a) of
                 [ (_, Male, _), (_, Female, _) ] -> True
                 [ (_, Female, _), (_, Male, _) ] -> True
                 _ -> False

main = do
  putStrLn $ show $ filter (\ a ->
                                 condition1 a
                              && condition2 a
                              && condition3 a
                              && condition4 a
                              && condition5 a
                           ) $ foldl (\ a b ->
                                        a ++ (map (\ c ->
                                                     zipWith (\ (g, h) i ->
                                                                (g, h, i)
                                                             ) b c
                                                  ) $ permutations [ Piano, Violin, Flute, Drum ])
                                     ) [] $ permutations [ (AL, Female)
                                                         , (XLE, Female)
                                                         , (BD, Male)
                                                         , (TND, Male) ]
3 楼 whirlwind 2009-08-06  
           唐纳德(小提琴手)
伯顿(长笛手)                 阿琳(鼓手)
             谢里尔(钢琴手)
2 楼 visoin 2009-08-05  
唐纳德     
1 楼 washingtin 2009-08-04  
阿琳是鼓手吧

相关推荐

Global site tag (gtag.js) - Google Analytics