手計算でやると数え上げが面倒で、漏れがあるか心配だったので、Rubyで検算用のスクリプトを書きました。コードは別に難しくなく、答えは一瞬で出ます。使うメソッドとしては Array#permutation
くらい。あとはテクニックとして 5桁の数字を構成するときにいわゆる Horner法を用いていることくらいでしょうか。nn
を計算しているところ、工夫すれば再帰的に書けるような気がしないでもないです(桁数が上がっても対応できるような汎用性があると有益なんだろうけど)。
# -*- coding: utf-8 -*- # 2023年5月号学コン大問2 # 無作為に抽出した5枚のカードで数字Nを作り # Nが6の倍数になるときの確率を求める # if __FILE__ == $0 then aa = [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5] ii = 0; mm = 0 for cc in aa.permutation(5).to_a mm += 1 if (cc.length == 5) then nn = ((((cc[0]*10)+cc[1])*10+cc[2])*10+cc[3])*10+cc[4] if (nn.modulo(6) == 0) then ii += 1 end else raise "ary length must be 5: cc.length = #{cc.length}" end end p Rational(ii,mm) #=> (58/429) end