帰りに気になった問題。
帰りに電車内のテレビ(?)で見た、受験の神様のCMの問題が気になった
1から1000まで並べて書いたとき、1は何回書くでしょう?
1から99までの間で、1の位にでてくる1は10回。10の位も10。これが、1000までだと、(10 + 10) * 10だから200。また、1から1000までの間に、100の位では100。1000の位が1だから、全部合計して、301のはず。
というわけで、確かめた。
Prelude> length $ filter ((==) '1' ) $ foldr (\x y -> y ++ show x ) "" [1..1000] 301
なんとか正解。