ページ 1 / 1
乱数で同じ値は出さないようにする
Posted: 2010年11月23日(火) 14:10
by mm
乱数を発生させ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:乱数で同じ値は出さないようにする
Posted: 2010年11月23日(火) 14:11
by mm
実行結果です
Re:乱数で同じ値は出さないようにする
Posted: 2010年11月23日(火) 14:58
by 初級者
if文を使って、同じ値を出さないようにすることはできるのですか?
もしそうだとすると、目的は達成できているのではありませんか?
同じ値を出さないこと
if文を使わないこと
真の目的はどちらですか?
Re:乱数で同じ値は出さないようにする
Posted: 2010年11月23日(火) 14:59
by みけCAT
乱数の範囲によってはかなり効率が悪いですが、
まず、あらかじめ乱数の範囲の整数を順番に配列に格納します。
次に、その配列の乱数で取得したインデックスの値を乱数として使います。
そのあと、そのインデックス以降の配列に格納されている値を一つずつ前に持ってきます。
インデックスの取得に使う乱数の範囲を一つ減らします。
これの繰り返しです。
ただし、実数の乱数は取得できません。
Re:乱数で同じ値は出さないようにする
Posted: 2010年11月23日(火) 16:13
by みけCAT
ソースを見ました。
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;
}
としてみてください。
Re:乱数で同じ値は出さないようにする
Posted: 2010年11月23日(火) 17:22
by mm
確かにこの条件式では0が省かれるかたちになってしまっていますね。ありがとうございます
ですが、やはり同じのが表示されてしまうのでもう少し自分でも問い詰めてみようと思います