• ベストアンサー

幾枚かのコイントスで0~9の乱数を作る

何枚かのコインを同時に振って、0から9の乱数を作るには、どのような方法があるでしょうか? コイン一つ一つに目印を付けて…などという方法ではなく数学的な方法を教えていただけると嬉しいです。 硬貨の裏表は五分五分の確率で現れるものとします。 よろしくお願いします><

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

  • ベストアンサー
  • naniwacchi
  • ベストアンサー率47% (942/1970)
回答No.1

>コイン一つ一つに目印を付けて…などという方法ではなく これがどのような方法を言われているのか、具体的にはわかりませんが。 考えついた方法を書いてみます。 (A) 10枚のコイン i) 10枚のコインを同時に投げます。 ii) 表が出た枚数-1をそのときの数字とします。 この方法が「目印をつけて」のことでしょうか? (B) 5枚のコイン i) 5枚のコインに表裏に0~9の数字を書きます。 ii) コインを箱に入れて、1枚取り出します。 iii) 取り出したコインを投げて出た数字をそのときの数字とします。 この操作を繰り返します。 (C) 2進法 i) 4枚のコインを「1の位」「2の位」「4の位」「8の位」とします。 ii) コインの表を「1」、裏を「0」としておきます。 iii) 4枚のコインを投げて、表裏の数字を足し合わせます。 たとえば、8の位から順番に「裏」「表」「表」「裏」と出たとすれば、 8×0 + 4×1 + 2×1 + 1×0 = 6となります。 ただし、この場合では 10~15の数字が出てしまうので、その場合はやり直しとして記録しないこととします。 (C)がコインの枚数が少ないのですが、 「やり直し」が発生してしまうのがところが難点です。

mmammamma
質問者

お礼

Bの方法が「目印を付けて…」という内容と近かったと思います。 「何枚かの硬貨を同時に振って」という意図は、「複数のランダムな二進数を用いて」ということですので硬貨に数字を書いてしまったら裏表が二進数以上の意味を持ってしまうので。 Aの方法は、10枚の硬貨を用いた場合、現れる表の数のパターンは11個なので全部の硬貨が裏だった場合は「-1」となってしまい0~9の乱数は出せませんね。 しかし硬貨を9枚にすると丁度0~9までの数字が作れるので、Aの方法を参考にさせていただきます。 回答ありがとうございました!

その他の回答 (4)

  • mis_take
  • ベストアンサー率35% (27/76)
回答No.5

なるべく少ないコインで, なるべくコインに印をつけないで, という条件で考えました。 5枚のコインのうち2枚だけ名前をつける(A,Bとする)。 全部表または全部裏が出た場合は振りなおす(残りは30通り)。 名無しの3枚のうち表が出た枚数で分類する ・表が1枚⇒Bが表ならx=1,裏ならx=3とする ・表が2枚⇒Bが表ならx=2,裏ならx=4とする ・それ以外⇒Bに関係なくx=0とする。 *Aが表ならxを答える *Aが裏ならx+5を答える このようにすると,0~9が等確率で現れます。

  • naniwacchi
  • ベストアンサー率47% (942/1970)
回答No.4

#1です。 masa2211さん、検証いただきありがとうございます。 (B)について言われているとおりです。 「二項分布」を忘れていました。 (C)の方法は、10で割り切れるようなコインの枚数があればいいのですが それがないので「どこかで切り捨てる」ことが必要になります。 10枚ぐらいが手ごろで切り捨てる無駄も少ないので、よいと思います。 10枚のコインで 1000まで数えられるところが、2進法の威力ですね。

mmammamma
質問者

お礼

皆さん丁寧に答えてくださってありがとうございました。 さまざまな方法を検証させていただいた結果、やり直しなしでは二進数で乱数0~9を発生させる方法はないと学びました。 naniwacchiさんの挙げてくださった方法がより有効かと判断しお礼をつけさせていただきます。 ありがとうございました。

  • masa2211
  • ベストアンサー率43% (178/411)
回答No.3

>「複数のランダムな二進数を用いて」 それがアリなら、当該のランダム二進数(桁が充分大きいとして。)を十進数に変換して、桁を順番に取り出せば良いでしょう。 >10枚のコインを同時に投げ、表が出た枚数-1を使う。 それでは、通常の意味の乱数になりません。 通常の意味の乱数は、0から9の出現確率が等しくなる必要がありますが、 10枚のコインを同時に投げた場合、5枚表の可能性が高く、1枚とか9枚表の確率は低いです。 よって、乱数ではありません。 で、0~9が均等に出るようにするには、たとえばosu_neko09さんの方法とか。 それでも若干に偏りあり。 おすすめは、naniwacchiさんのCの方法で、コインは10枚。 発生する数は0~1024なので、1000以上は振り直し、1000未満なら、10進3桁なので0~9の3回分の乱数が切り出せます。  ※ただし、naniwacchiさんのCの方法は、通常、コイン一つ一つに目印を付けること該当してしまいます。   mmammammaさんはそう思っていないみたいですが.....

回答No.2

振るのが(既定の回数)だけとか、同時に振ったコインの一枚一枚が区別できないのであれば、0~9が一様に出る乱数を作るのは不可能ですね。 たとえば、コインを30枚負って、表が出た枚数が0枚~30枚まで順に4,4,4,4,4,4,2,3,2,1,0,4,3,2,1,0,4,3,2,1,0,4,3,2,3,1,1,1,1,1,1とし、さらに一枚コインを振って、表なら5を足す、という方法なら、2145:2147:2147:2145:2152くらいの比率に出来ますが・・。 振りなおし有りでしたら、(最悪、無限回振ってよければ)均等に出すように出来ますね。

関連するQ&A

  • コイントスの統計の検定

    コインの表が出る確率をxとすると裏が出る確率は1-xになります。 コイントスを2回一組として300回ほど行いました。 表表が、90回、表裏あるいは裏表が150回、裏裏が60回出たとすると、 これが確率的にありうるかどうかを検定で調べたいと考えています。 どんな式になりますでしょうか?

  • 乱数の発生方法

    こんにちは! いつも大変参考にさせていただいております。 どうか教えていただきたい事があります。 数学は大の苦手で、学生時代からほとんど勉強してこなかっただけに、 数学の本を読んでも、今回の問題とどのように関係しているのかがわからず、お手上げ状態です。 実行したいのは、確率により乱数を発生させたいです。 たとえば、0から2の乱数を発生させるにあたり、 0の発生は50%、 1の発生は25%、 2の発生は25%、 というように、発生する確率を設定したいと思っています。 確率の本を読んでみたのですが、入門書には確率の求め方は載っていたのですが、それをどのように利用したらいいのかわかりません。 このような乱数の発生のさせかたは可能でしょうか? また、どのようにしたらいいのでしょうか? 教えてください。。。

  • 乱数

    ・1~50の乱数を昇順で6個表示。しかし各数字には表示させる確率を設定してあります。 単純に乱数を昇順で6個表示させることは出来ますが、確率を元に表示させる方法がわかりません。 ご教授おねがいします。 環境 php + Mysql

    • ベストアンサー
    • PHP
  • 確率の問題

    またまた質問があるので誰かお願いします。 「問題文」 n枚の硬貨を同時に投げて表の出たものを取り去り、1回後に、もしも硬貨が残っていれば残った硬貨をもう一度同時に投げて表の出たものを取り去ることにする。このとき全部なくなる確率を求めよ。 「模範解答」 n枚のコインを1、2、3~~~nというように区別をつけ1枚のコインを続けて2回投げることを1、2、3~~~~nの順に行う、と考える。 1枚のコインを2回投げたとき、そのコインがなくならない確率は1/2×1/2=1/4 。 よって1枚のコインを2回投げたとき、そのコインがなくなる確率は1-1/4=3/4 ゆえに1、2、3~~~nを同じことを続けると(3/4)^n となる。 となっています。なおn乗には 「^n」 の記号を使ってます。 質問したいことは題意を「n枚のコインを1、2、3~~~nというように区別をつけ1枚のコインを続けて2回投げることを1、2、3~~~~nの順に行う」という試行に読み替えることがどうして可能なのかということです。 同時になげる場合 「表(または裏)の枚数」しか問われない(??)のに対して言い換えた試行は「区別をつけているぶん区別のついた各コインのせいで場合の数も増えると思うのですが。

  • 硬貨を用いた乱数表の作成

    学校の課題で、 硬貨の裏表が出る確率は2分の1かどうかは確かではない場合に、硬貨一枚を用いた乱数表の作成方法を記述せよ。 といった課題が出ました。 硬貨の裏表の確率が等しく2分の1ならば二進数を用いて説明できますが…この場合だと全くわかりません。 よければ教えてください。

  • 乱数の数学的な定義はありますか?

    数学の背景がないので、質問が変かも知れませんが、よろしくお願いします。 「乱数」には、数学的な定義がありますか? 例えば、「いかなる視点からも規則性のない数の並び」とか、「偶然にまかせた数の並び」とか言えるのでしょうか? また、ある数列を与えられたときに、それが、「乱数」かどうかを調べる方法はあるのでしょうか? というのは、たまたま、1が100個ならんだ数列でも、必ずしも「乱数」ではないと言えないような気がするのです。もし、偶然に任せるという意味で乱数を考えるとすると、たまたま、1が100個並ぶことも有り得るし、それを意識的に排除すると、むしろ、自然な「乱数」ではなくなってしまうような気がして、よくわからなくなってしまいました。

  • 硬貨の出る目の数について

    硬貨の出る目の数について 4枚のコインを投げる時、少なくとも1枚裏が出る確率は? の答えの導き方をお教えください。 4枚のコインを投げる場合の、起こり得る全ての総数((1))はわかるのですが、 少なくとも1枚裏が出る確率((2))の出し方が分かりません。 (1)16。4枚の硬貨を同時に投げて、表・裏の総数nはn=2の4乗で16。 よろしくお願いします。

  • 乱数の発生確率(c++)

    0,1の2値の乱数を発生させるとき、1の発生確率を例えば20%にするにはどのようにすればよいのでしょうか。 発生乱数を除算して余りを求めて・・・・の方法など試したのですが、うまいこといきませんでした。(プログラムが動かないのではなく結果が) 私の確率の認識が間違っているのかもしれませんが、この場合、1000個発生させた場合、300近く1が出れば良いということですよね。

  • 確率の問題です

    硬貨を投げた100回中40回表が出た場合について、この硬貨に偏りがあるかないかという理論について。 「もしその硬貨に偏りがなく裏表が同じ確率で出るならば、理想的には五分五分である。その理論値から2割の変動であるから、偏りがないとは言えない。」 エクセルを用いたシュミレーションなどを用いるなどして、実験的にこの理論を論破する方法というのはあるのでしょうか? 皆様のご意見を頂きたいです。 よろしくおねがいします。

  • 正規乱数とは

    学校の宿題ですがまず正規乱数の発生は2つの方法があるというのですが、意味がわかりません。 正規乱数でなんですか。 なぜ12個足して6をひくのですか。 また逆関数法の=NORMSINV(RAND()) てどういう意味ですか。 正規乱数の発生 1 一様乱数を12個足して6を引く方法 =RAND()+RAND()+・・・・+RAND() - 6 12個分 2 逆関数法 =NORMSINV(RAND())