• ベストアンサー

perlで確率計算

学校で「1つのサイコロを振ったとき, 3以下の数字が出た場合,もう一度サイコロを振っても良いものとする. このとき合計が6になる確率を,プログラムを利用して計算せよ」 というperlの課題が出されたのですが、さっぱりわかりません。 どなたか詳しく教えていただけませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • sample_
  • ベストアンサー率76% (20/26)
回答No.1

そうですねぇ。 課題ですので、調べごとをしつつがんばってみましょう^^ 下記に考えの道筋の助けになると思うことを書いてみますね。 まずは、問題を分解して考えて一つずつクリアしていきましょう。 >1つのサイコロを振ったとき さいころが登場するので、乱数をつかって1~6の数字が 出るようにするにはどうしたらようでしょうか? 見方をかえると6個の数字を乱数で再現できればよいので… 0から・・・にひと手間加えるってことでよさそうですね。 >3以下の数字が出た場合,もう一度サイコロを振っても良いものとする. どうやら、最大2回さいころを触れるようですね。 for文を使うと1回目2回目とカウントできそうですね。 ただし、2回目に行くには3以下でないといけないので for文の中にif文で3以下かそうじゃないか調べる必要がありますね。 つまり、for文の中で最初に調べた乱数を用いたサイコロを 実行して値を出してそれを判別してあげればよいと思います。 3以下ならそのままで、4以上ならfor文を抜けることを考えましょう。 >合計が6になる確率 合計がと言っているので、さいころ(乱数を用いたさいころ)を振るたびに 数値を保存する変数が必要そうですね。上で話に出たfor文の中で乱数で 作ったサイコロを振るたびに足し算してあげるとよいですね。 for文を抜けたら6以上かそうじゃないかをif文で調べると 6以上になった時の回数をしることができます。 ここまで、できたら答えは目前ですね。 上記の内容で1回(3以下が出たらもう一回振ることも含めて)のサイクルができました。 知りたい内容は、確立なので1000回とか1万回繰り返した際に実際に 何回6以上になることがあるかを調べればプログラムを使ってもとめた ことになると思うので、上記プログラムをfor文の中に収めて 1000回とか1万回繰り返してみるとある値(確立)に収束すると思うので 最後に6以上になった回数/for文で繰り返した数 で確立が出ると思います。 大筋はこんな感じ。 for(){ ←1000回/1万回と回数を増やして試してみる。  for(){ ←3以下の時もう1回振れるようにしておく。   乱数をつかってさいころを再現。   サイコロの値を足し算する。   if(){    4以上ならfor文を抜ける   }  }  if(){   サイコロの合計が6以上なら1カウントする。  } } サイコロの合計が6以上の回数/for文の繰り返しの数で確立を求めプリントする。 いかがでしょうか?? がんばってみてください。

noname#115031
質問者

お礼

分かりやすい説明ありがとうございます!! こんなに早く回答が返ってくるとは思わなかったので嬉しいです(^^* 1つ1つ考えていけばよかったんですね。 なんとか完成できそうです。 本当にありがとうございました!!!