乱数で同じ値は出さないようにする

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mm

乱数で同じ値は出さないようにする

#1

投稿記事 by mm » 14年前

乱数を発生させdate[20]のなかの2つをランダムで先後攻入れ替えで戦わせようとしているのですが、たまに同じデータが表示されてしまいます。

http://www.play21.jp/board/formz.cgi?ac ... &from=tree
上記のページ(No.2210)を参考にしながらif文を使わずに別で配列を用意し、そのなかで乱数を発生させrand_hai[0][1]の中の値をdate[0][1]とMC[0][1]に入れるプログラムになっています。
if文を使わず同じ値を出さないようにするのは可能でしょうか


初級者

Re:乱数で同じ値は出さないようにする

#3

投稿記事 by 初級者 » 14年前

if文を使って、同じ値を出さないようにすることはできるのですか?

もしそうだとすると、目的は達成できているのではありませんか?



同じ値を出さないこと
if文を使わないこと

真の目的はどちらですか?

みけCAT

Re:乱数で同じ値は出さないようにする

#4

投稿記事 by みけCAT » 14年前

乱数の範囲によってはかなり効率が悪いですが、
まず、あらかじめ乱数の範囲の整数を順番に配列に格納します。
次に、その配列の乱数で取得したインデックスの値を乱数として使います。
そのあと、そのインデックス以降の配列に格納されている値を一つずつ前に持ってきます。
インデックスの取得に使う乱数の範囲を一つ減らします。
これの繰り返しです。
ただし、実数の乱数は取得できません。

みけCAT

Re:乱数で同じ値は出さないようにする

#5

投稿記事 by みけCAT » 14年前

ソースを見ました。
for(i=19;i>0;i--){
    rnd=rand()%i;
    wk=rand_hai;
    rand_hai=rand_hai[rnd];
    rand_hai[rnd]=wk;
}

のところで、rand_hai[0]の値を書き変えていないので、同じ値になることがあると思われます。
for(i=19;i>=0;i--){
    rnd=rand()%(i+1);
    wk=rand_hai;
    rand_hai=rand_hai[rnd];
    rand_hai[rnd]=wk;
}

としてみてください。

mm

Re:乱数で同じ値は出さないようにする

#6

投稿記事 by mm » 14年前

確かにこの条件式では0が省かれるかたちになってしまっていますね。ありがとうございます
ですが、やはり同じのが表示されてしまうのでもう少し自分でも問い詰めてみようと思います

閉鎖

“C言語何でも質問掲示板” へ戻る