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

他の質問での回答に対してもう少し具体的に知りたいと思って投稿しました。

自分はいわゆる日曜プログラマです。
勉強のつもりでOKWebのコンピュータ関連でいろいろ回答してます。
(未熟者なのでとんちんかんなのが多いですが)

で次の質問に回答しました。内容は「重複しない乱数を発生させる方法」です。
http://okweb.jp/kotaeru.php3?q=1239644

私が回答したのは#10です。私の考えは
1. 最初に配列に重複しない値を入れ(1から100を順番に)
2. 2要素の値を入れ換える
3. 2を任意の回数繰り返す
4. 配列の先頭から値を取り出す

という考えです。

が、そのあと#12の回答があり、それを読むと私の方法ではマズイようです。
「どうしてマズイのか」ということはなんとなくわかった(ような)気がするんですが、
では「具体的にどうすべきなのか」が知りたいです。

違う方法として自分ではこう考えました。

上記1の配列(これを配列Aとする)と同じ要素数(ここでは100個)の配列Bを作って
1. 0~(配列Aの要素数 - 1)の範囲で乱数を発生させる -> 得られた数値をnとする
2. 配列A[n]の値を配列Bに入れる -> 最初は配列B[0]に入れる
3. 配列A[n]を削除 -> 要素数が1個減る

以下これを繰り返し、配列B[99]まで入れて終了。

過去の質問を覗いてみましたが、いろいろな方法があってどれがいいのか迷ってきま
した。どちらかというと具体的なソースではなく考え方を教えてください。

よろしくお願いします。

A 回答 (11件中11~11件)

1.A(0)からA(99)までの配列を用意して、0から99までの値を入れておく。


2.0から99までの乱数を発生させる。
3.A(99)にその乱数を書き、その乱数の配列に99を書く。
4.0から98(ここがポイント)までの乱数を発生させる。
後は同じことを繰り返せばよいです。

最近のプログラマーは、このようなテクニックをあまり知らないようです。
言語の使い方ばかりは得意なようですが。
    • good
    • 0
この回答へのお礼

なるほど。シンプルなことなんですね。ありがとうございました。

お礼日時:2005/02/27 15:51

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


このQ&Aを見た人がよく見るQ&A