帰りに気になった問題。

帰りに電車内のテレビ(?)で見た、受験の神様の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

なんとか正解。