みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

指定した範囲の乱数がダブらない方法

指定した範囲の数値から乱数を発生させ、指定した個数を取り出す。
数値はダブらない。

投稿日時 - 2018-04-03 19:29:16

QNo.9484719

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

乱数の発生自体でそのようにすることはできないと考えてください。
数値が一周しないうちにダブるのもまた、乱数です。(そうでなければ、「一度発生した数値は出現しない」という『規則性』があることになってしまいます)

少々手間をかける必要があります。

例えばExcelでやろうとすれば、A1~A100に、1~100までの数値を順番に入れます。(フィル機能で一瞬で入れられます)
そしてB1には「=RAND()」と関数式を入れ、B1~B100にコピーします。
この状態で、乱数側(B列)で昇順並べ替えなどすると、A列も一緒にシャッフルされます。

これで乱数表ができましたので、頭のA1から順番に取り出していくと、ご質問にある乱数の取り出し方ができることになります。

プログラミングするなら同様に、値を取り出す用の配列とシャッフルのための乱数用配列を用意し、乱数に従ってソートなどすることでできるでしょう。

まあプログラミングならば、ソート用の乱数配列は用意せず、順番に1~100まで入れた配列要素それぞれにおいて、ランダムなどこか(配列の他の場所)と入れ替える、というような組み方をしてもいいかもしれません。
ただ、コンピュータの乱数は掛け合わせて使うと規則性が出てきてしまう恐れもあるので、やはり前の方法(配列2つ使う)の方が癖の無い乱数になるかとは思います。

投稿日時 - 2018-04-04 11:19:08

ANo.2

さいころで考えます
1回目出た数にフラフをつけます
2回目出た数にフラグがついているか確認し ついていれば 再度サイコロを振ります

これを繰り返します

投稿日時 - 2018-04-04 03:05:26

ANo.1

乱数はそれだけで本が書けるテーマですよ。
乱数関数で満足できないのなら、乱数のアルゴリズムについて調べ、条件を満たす上で何を踏まえなければならないのか勉強してください。

投稿日時 - 2018-04-03 19:52:02

あなたにオススメの質問