题解 P1720 【月落乌啼算钱】

HoshinoTented

2019-01-28 16:04:32

Solution

# 先说几句 其他的题解都说的很清楚了, 是斐波那契数列 ~~但都没有Haskell的题解~~ # [题解(Haskell)](https://github.com/HoshinoTented/LuoGu/blob/master/src/P1720.hs) ```haskell fibNext :: (Int, Int) -> (Int, Int) fibNext (a, b) = (b, a + b) fib :: Int -> Int fib n = fst (iterate fibNext (0, 1) !! n) main :: IO () main = do n <- read <$> getLine :: IO Int putStrLn $ show (fib n) ++ ".00" return () ``` 关于这个斐波那契数列的计算方式, 是从 《Haskell函数式编程入门》 里学来的 `fibNext` 接收一个 `(Int, Int)`, 将第二项作为返回值的第一项, 将一二项之和作为返回值的第二项 再用 `iterate` 生成一个无限的斐波那契数列, 看起来是这样子的: ``` [(0,1),(1,1),(1,2),(2,3),(3,5),(5,8),(8,13),(13,21), ...] ``` 之后只需要取出对应下标的 `(Int, Int)`, 使用 `fst :: (a, b) -> a` 取出第一项就可以了