- 締切済み
指定した範囲の乱数がダブらない方法
指定した範囲の数値から乱数を発生させ、指定した個数を取り出す。 数値はダブらない。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- asciiz
- ベストアンサー率70% (6803/9674)
乱数の発生自体でそのようにすることはできないと考えてください。 数値が一周しないうちにダブるのもまた、乱数です。(そうでなければ、「一度発生した数値は出現しない」という『規則性』があることになってしまいます) 少々手間をかける必要があります。 例えばExcelでやろうとすれば、A1~A100に、1~100までの数値を順番に入れます。(フィル機能で一瞬で入れられます) そしてB1には「=RAND()」と関数式を入れ、B1~B100にコピーします。 この状態で、乱数側(B列)で昇順並べ替えなどすると、A列も一緒にシャッフルされます。 これで乱数表ができましたので、頭のA1から順番に取り出していくと、ご質問にある乱数の取り出し方ができることになります。 プログラミングするなら同様に、値を取り出す用の配列とシャッフルのための乱数用配列を用意し、乱数に従ってソートなどすることでできるでしょう。 まあプログラミングならば、ソート用の乱数配列は用意せず、順番に1~100まで入れた配列要素それぞれにおいて、ランダムなどこか(配列の他の場所)と入れ替える、というような組み方をしてもいいかもしれません。 ただ、コンピュータの乱数は掛け合わせて使うと規則性が出てきてしまう恐れもあるので、やはり前の方法(配列2つ使う)の方が癖の無い乱数になるかとは思います。
- hahaha8635
- ベストアンサー率22% (800/3610)
さいころで考えます 1回目出た数にフラフをつけます 2回目出た数にフラグがついているか確認し ついていれば 再度サイコロを振ります これを繰り返します
- unokwave
- ベストアンサー率58% (966/1654)
乱数はそれだけで本が書けるテーマですよ。 乱数関数で満足できないのなら、乱数のアルゴリズムについて調べ、条件を満たす上で何を踏まえなければならないのか勉強してください。