過去ログ

まるケン
#24860
プログラムの実行時間を語るには、マシンのスペックの条件が大事かと。
ちなみに、rubyでかいたプログラムをVictorのちっちゃいノートInterLink(PentiumM、1GHz)で走らせたところ、3.3秒くらいで出ました。
まだまだ速くできるところは残っていますが、以下にプログラムを晒します。
(段下げのために全角スペースを使ってます)

j = k = 0
(12345..98765).each do |i|
  (a=i.to_s.split('').uniq).delete('0')
  if(a.size == 5) then
    j += 1
    k += 1 if((i%3) == 0)
  end
end
p j, k

プログラムの解説:
数字が重複しようが0が入ろうが、全くかまわずに12345から98765までの連続した数字を作ります。(12345..98765)
そのそれぞれについて(each do ・・・ end)、数字を文字列に変換(to_s)し、構成する文字を一桁ずつばらし(split)、ここではじめて重複する文字を除き(uniq)、さらに'0'を取り除きます(delete)。
この結果の桁数(size)が、元の桁数(=5)と等しかった場合は、今回の問題で作れる数字であると言うことで、その総数(変数j)を1増やします。
また、この結果の数字が3で割り切れるならば、その総数(変数k)を1増やします。
全部終わったら結果の表示。(p)

Let's ruby!!
   4月12日(火) 10:22:46   MAIL:take4310@mobile.email.ne.jp HomePage:まるケンの部屋  24874

過去問題一覧へ戻る