题解 P5660 【数字游戏】

HoshinoTented

2019-11-23 17:45:10

Solution

简单的入门题 题目要求是求出一段字符串中字符 1 的个数,那可以写出这样的代码: ```haskell oneCount :: String -> Int oneCount "" = 0 oneCount ('1':xs) = 1 + oneCount xs oneCount (_:xs) = oneCount xs ``` 但是想一想,Haskell 可是函数式语言,应该用函数式的方法解决问题,于是把眼光转到 `filter` 函数: ```haskell filter :: (a -> Bool) -> [a] -> [a] ``` 根据传入的判断函数过滤出需要的内容,而我们需要的内容就是字符 '1',于是: ```haskell oneCount :: String -> Int oneCount str = length (filter (=='1') str) ``` 补全 main 函数: ```haskell main :: IO () main = do str <- getLine print (oneCount str) ``` 内联: ```haskell main :: IO () main = do str <- getLine print (length (filter (=='1') str)) ``` Point-Free: ```haskell main = getLine >>= print . length . filter (=='1') ``` 最后,一行解决 ~~垃圾 C++ 能一行吗?能这么简洁吗?~~