1から1000まで続けて書いてできる整数…を考える

sumimさんの記事経由で灘中学校98年2日目第1問(問題)へ。

1から15まで続けて書くと123456789101112131415となる。これを1つの整数と考えると、この数は21けたで,1が8回使われている。このように、1からある整数まで続けて書いてできる整数について、次の各問いに答えよ。
(1)1から100まで続けて書いてできる整数は何けたか。
(2)1から1000まで続けて書いてできる整数は何けたか。また、その整数の中に1は何回使われているか。

灘中学校1998年2日目第1問(問題)

(2)の最後の問題だけ解きます。
1から1000までではなく、000〜999という3桁の数字列(1000個)を考える。この3桁×1000個の数字列には全部で3×1000=3000個の数字が使われている。0〜9までの数字の使われ方は対称なので、3000個の数字には0,1,2,...9の10個の数字が同数ずつ含まれている。したがって1の使われている個数は3000÷10=300個。問題では1から1000までを考えることになっていたので、1000で使われている1の分を1加えて、300+1=301個の1が使われている。答え:301個。
Rubyで数えてみる。

n = 0
(1..1000).each do |k|
  k.to_s.split(//).each do |c|
    n += 1 if c == '1'
  end
end
p n #=> 301

答え合わせ完了。