dポイントプレゼントキャンペーン実施中!

サイコロを二つ振って出た数a,bを|a-b|=0,1,2,3,4,5で確率pを求めたいのですが、どこに不備があるかご指摘お願いします。

「サイコロを二つ振って出た数a,bを|a-」の質問画像

A 回答 (5件)

>c++で出現をカウントできていると思ってたのですが



まず、aとbの差のの絶対値其々の積算値 を取るのですから、
cー個で出来るわけ有りません。。

int c[6];

でint 6個の配列を確保してゼロクリアしましょう。

最初のループの末尾で


c[abs(a-b)]++;

でカウントすれば、|a-b| の各値の出現回数は簡単に求まります。
    • good
    • 0

>c++で出現をカウントできていると思ってたのですが、



カウントしていますよ。
サイコロの出目ではありませんが。

最初のforループで乱数によりサイコロを振ったことになっています。
で、画面に表示した後、出目の結果は「捨てて」います。
# 配列に格納したわけでも、その時に出目のカウントを行ったわけではありません。

で、その後で「よ~し、カウントしちゅうぞ」と、「最後の出目」だけ見てます。
# 変数aとbに残っているのは「最後に乱数生成した値だけ」ですから。

ということで、cは1より大きくはなりません。
10000回を100000000回にしたところでも。

>どのようにすればよいですか?

乱数生成した後で同じforループの中でカウントしてください。
さもなければ配列に格納して後からカウントしてしてください。
    • good
    • 1

最初のループで何も、目に対して処理していないのに


何か答えが出ると思うこと自体どうかしてます。

メチャクチャです。

ちゃんと丨a-b丨の各値の出現回数をカウントしましょう。
    • good
    • 0
この回答へのお礼

遅くなりました。
c++で出現をカウントできていると思ってたのですが、どのようにすればよいですか?

お礼日時:2017/12/25 12:08

モンテカルロ法で計算するなら、


6種類の結果毎の回数を計測する変数なり配列を用意しましょう。
計測した各回数を、全部の試行回数で割れば確率が出ます。

ただし、この命題ならば
乱数を使わないで総当たりで計算する方がお勧めです。
    • good
    • 0

画像じゃなく、テキストで貼るべきかとおもいますけどね。



最初のfor文はサイコロの値を表示するだけなので、確率計算には無関係になってます。
2つめのfor文はサイコロの最後の結果だけで判定していますが、意図した動作になるでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!