• ベストアンサー

1から20までの整数から、重複なくランダムに3つ数づつを取り出す

1から20までの整数から、重複なくランダムに3つの数を取り出したいんですけど、簡単に出来るのでしょうか ?

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.5

高級言語は配列のランダム機能があったり するのでみなさんローレベルのランダム化 にはなれていないのでしょうか? 残念ながらみなさんのコーディングには 問題があります。 重複したら、リトライするという方式は 一番してはいけない方法です。 1000個の要素から1000個抜き出すときに、 999番目の要素は約0.1%の確率でしか重複 しない数値がヒットしません。 要素数が増えると加速度的に時間のかかる プログラムです。 また#4さんのように、適当な回数要素数 の中で入れ替えをするというの、よさそうに 見えますが、初期要素からいれかわらない 可能性が強く、かなり偏りがでるランダム です。 そもそも3つの要素を抜き出すのであれば ランダム処理は3回やればじゅうぶんのはずです。 以下の例はざっとかいたものなのでバグがある かもしれませんがランダム化のフローを 理解いただく参考までに。 <script language="javascript"> function rndview(min,max,num){ var a=new Array(); for (var i=min;i<=max;i++){ a[i]=i; } for (var i=min;i<=(min+num-1);i++){ var p1 = i+Math.floor(Math.random() * (max-i+1)); var p2 = a[i]; a[i]=a[p1]; a[p1]=p2; } txt=""; for (var i=min;i<=(min+num-1);i++){ txt+=(txt=="")?a[i]:","+a[i]; } alert(txt); } </script> <input type="button" value="ランダム" onClick="rndview(1,20,3)">

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (12)

  • Jodie0625
  • ベストアンサー率30% (397/1288)
回答No.2

#1です。 肝心なことを忘れてました。 #1の回答のままですと、小数部が残りますし、単純に切り上げをするのも間違いです。 Math.round((20*Math.random() + 0.5) で、 0.5以上20.5未満の数を四捨五入するようにします。

全文を見る
すると、全ての回答が全文表示されます。
  • Jodie0625
  • ベストアンサー率30% (397/1288)
回答No.1

Math.random()を使うと、0以上1未満の乱数が生成できます。 これを使って、 20*Math.random() とすると、0以上20未満になります。 20も含めたいので、これに1を足します。 20*Math.random() +1 これで出てきた数字を変数に入れておき、もう一回この関数を呼び出し、変数に入っている数が出てきたらもう一回呼び出します。 ユニークな乱数が3つ生成されたら、完了です。 コードは工夫してみてください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【エクセル】ランダムで重複しない整数を出したい。

    Windows 7、エクセル2007です。 ランダムで重複しない整数を任意の範囲から一部のみ入力するにはどうしたら良いでしょうか? 1.任意の範囲「1~50」とか「1~100」とか「15~300」とかから、20個だけとか40個だけとか。 2.ランダムなので「2,6,3,4,8,1・・・」とかのn、n+1、n+2ではないランダムな整数。 3.重複しないこと。 上記1~3を満たしたやり方ってありますか? 出てこない数があっても良いんです。 例えば、1~10までの範囲でランダムに3個だけセルに入力したいとき。 A1に7、A2に4、A3に9というふうに。 それが1~300の範囲で50個の数字をランダムに重複しないように入力する。 A1に15、A2に163、A3に92、・・・A50に43。 残りの250個の数字は入力されないという感じです。 乱数だと重複します。 ランク(順位)と組み合わせると、連続(n、n+1、n+2)になってしまいます。 列はどこでも良いんですが、行は連続したいです。 A1~A50とか、A1~A300とか。 関数の組み合わせでできないでしょうか? また、マクロは分からないので、詳しく解説して頂けると助かります! 情報が不足する点がありましたら指摘して下さい。 追加します。

  • Excelで整数ランダムにだすには

    Excelで整数ランダムにだすにはどのようにすればいいのでしょうか? 整数 1~50 同じ整数を重複しない よろしくお願いします。

  • Excelでランダムかつ重複無し整数の出し方

    例えば3~7の範囲で、ランダムかつ重複しないように整数を出したい場合、 どうしたらよいでしょうか? Windows XP Excel 2003です。

  • エクセルで重複しないランダムな1桁の数

    似たような質問はたくさんあるのですが,どれも今ひとつしっくりこないのであらためて質問します。 エクセルでA1:I1の範囲に1から9の数を重複なしでランダムに表示させたいのですが,よい方法を教えてください。(九九の練習プリント作成のためです。) 現在の知識で=TRUNC(RAND()*9)+1 とすることによって1から9までの整数値をランダムに表示することはできているのですが,これだけだと重複してしまいます。これを修正していただけると助かりますが,別の方法でもかまいません。 よろしくお願いします。

  • PHPで変数を重複しないようにランダムで配置したい

    表題のとおりなのですが、書きソースを見てもらえればわかりやすいかと思いますので、まずはご一読頂けると幸いです。 -------------------------------------------------------------------------------- <?php $rank[1] = "<td>100個</td>"; $rank[2] = "<td>200匹</td>"; $rank[3] = "<td>300万</td>"; $rank[4] = "<td>400億</td>"; $rank[5] = "<td>500台</td>"; ?> <table>  <tr>   <?php echo $rank[ここに重複しないランダムな整数を入れたい]; ?>   <?php echo $rank[ここに重複しないランダムな整数を入れたい]; ?>   <?php echo $rank[ここに重複しないランダムな整数を入れたい]; ?>  </tr>  <tr>   <?php echo $rank[ここに重複しないランダムな整数を入れたい]; ?>   <?php echo $rank[ここに重複しないランダムな整数を入れたい]; ?>  </tr> </table> -------------------------------------------------------------------------------- このような形で、 [] の中の数字を重複せずにランダムに入力されるようにしたいです。 目的としてはテーブルの中の要素をページを更新するたびにランダムに並べ替えるためです。 私が思いついた方法は上記のようなものが一番シンプルで良い気がしたのですが、ほかにスマートな方法がありましたら、是非教えていただきたいです。 サンプルでは変数の中にちょっとしたものしか入っていませんが、実際にはもっと長いものになります。 どうかよろしくお願い致します。

    • ベストアンサー
    • PHP
  • Excel 文字や記号を重複無し&ランダムで出す

    以前、整数をランダムかつ重複しないように出す方法を質問しました。 http://okwave.jp/qa/q8998274.html 今度は、文字や記号などの整数以外のものをランダムかつ重複しないように出したいのですが… 可能でしょうか?

  • 重複しない整数をランダム表示

    エクセル98を使用しています。 例えば3つのセルに1~5の数字をランダムに、重複させないように表示させることはできるでしょうか? 作業用のスペースを使用して、いくつか処理を加えれば可能なのですが、関数を組み合わせてもっとスマートにできる方法はないかと思い、ダメ元で質問させて頂きました。 大したことではないのですが、いいアイディアがある方はアドバイスを頂けると助かります。

  • 整数のランダム生成について

    エクセル98を使用しています。 例えば1~5の数字の整数をランダムに発生させようとしているのですが、 =INT(RAND()*5+1) と記述する方法と =INT(RAND()*5)+1 と記述する方法があるのですが、どちらが良いのでしょう? 実際試したみたところ、どちらも1~5の整数をランダムに発生させることができています。 結局は同じ意味なのでしょうか? 大したことではないのですが、よろしくお願いします。

  • Excelでのランダムな整数の出し方

    A1のセルに、ルーレットのようにランダムな整数を 表示させたい時は、 =INT(RAND()*10) という関数を使うのだと思いますが、 これだと0~9までが均等に出現しますよね。 A1には、0,1,2の3つのみを ランダムに出現させたい、という場合は どのように設定すればいいのでしょうか? 宜しくお願いします。

  • ランダム数の発生

    エクセル上でランダム数を発生させるソフトをご存じないでしょうか? できれば、整数桁4桁くらいまで、小数点以下4桁くらいまでを指定して(桁数を指定して)できるとよいのですが・・・。