• 締切済み

perl初心者です。

perl初心者です。 最初にサイコロを1回振り,出た目の数だけ再度サイコロを振ることができるも のとする.このとき,1振り目を含めて合計が10 以上になる確率を求めるプログラムを作りたいのですが、2回目以降の数値の和の計算方法がわかりません。回答よろしくお願いします。

みんなの回答

  • gmlkc
  • ベストアンサー率0% (0/1)
回答No.3

複数のサイコロを振ってそれぞれの目の出る確率は 1 ÷ 6^(サイコロの数) なので、サイの目の合計が10以上の場合にそれを足していけば、解を得ることが出来ます。 コードは以下のページで確認できます。 http://codepad.org/tp500EMH

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

>1振り目を含めて合計が10 以上になる確率 すなわち、1-(1振り目を含めて合計が10 未満になる確率) 一振り目が1=6パターンすべて絶対<10。 一振り目が2=36パターン中二振り目が1なら絶対<10。2なら5/6で<10。3なら4/6。4なら3/6。5なら2/6。6なら1/6。 一振り目が3=二振り目が1として、三振り目が1なら4/6で<10。2なら3/6で<10。3なら2/6。4なら1/6。   二振り目が2として、三振り目が1なら3/6で<10。2なら2/6で<10。3なら1/6。   二振り目が3として、三振り目が1なら2/6で<10。2なら1/6で<10。   二振り目が4として、三振り目が1なら1/6で<10。 一振り目が4=二振り目が1、三振り目が1として、四振り目が1なら2/6で<10。2なら1/6で<10。   二振り目が1、三振り目が2として、四振り目が1なら1/6で<10。   二振り目が2、三振り目が1として、四振り目が1なら1/6で<10。 一振り目が5、6=絶対≧10。 なので、 $p = 6; $n = 6; $p += 6 + 5 + 4 + 3 + 2 + 1; $n += 6 * 6; $p += 4 + 3 + 2 + 1; $n += 6 * 6 * 6; $p += 3 + 2 + 1; $p += 2 + 1; $p += 1; $n += 6 * 6 * 6 * 6; $p += 2 + 1; $p += 1; $p += 1; $n += 6 * 6 * 6 * 6 * 6; $n += 6 * 6 * 6 * 6 * 6 * 6; print 1.0 - $p / $n; ――とか。いちおうrubyで検算してみた感じ、あってるような。 $d = (1..6).to_a; def dice( a, n ) if n == 0 then s = 0; a.each{|x| s+=x; } mk = s < 10 ? 'NG' : 'OK'; print mk,a.inspect, s, "\r\n"; return end $d.each{|i| a << i; dice( a, n - 1 ); a.pop; } end $d.each{|i| dice( [i], i ); }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

質問の意味がわかりません. 純粋に文章だけを読むと「2回目以降の数値は得られているが, それらの和を求められない」と解釈できますが, それでいいですか?

関連するQ&A