论坛首页 招聘求职论坛

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

浏览 7066 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-05-12   最后修改:2010-07-25

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

 

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

   发表时间:2009-08-04  
阿琳是鼓手吧
0 请登录后投票
   发表时间:2009-08-05  
唐纳德     
0 请登录后投票
   发表时间:2009-08-06  
           唐纳德(小提琴手)
伯顿(长笛手)                 阿琳(鼓手)
             谢里尔(钢琴手)
0 请登录后投票
   发表时间:2009-08-06   最后修改: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) ]
0 请登录后投票
   发表时间:2009-08-06  
whirlwind 写道
           唐纳德(小提琴手)
伯顿(长笛手)                 阿琳(鼓手)
             谢里尔(钢琴手)

人家第一个条件:伯顿对面是钢琴手……
0 请登录后投票
   发表时间:2009-08-12  
            唐纳德(小提琴手)
阿琳(钢琴手)                 伯顿(长笛)
             谢里尔(鼓手)




用JAVA算了半天终于算出来了
0 请登录后投票
   发表时间:2009-08-12  
汗,我用haskell算也就是一眨眼的事……
0 请登录后投票
   发表时间:2009-08-12  
是啊,这就是差距啊,我看了你的haskell,还特意去下载了一个haskell来看一看,以前听都没有听过这个语言。真是孤陋寡闻啊。
受教了,呵呵。
0 请登录后投票
   发表时间:2009-08-14  
牛X,第一次用JAVA来算。算了我好久,终于算出来了。
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics