• 締切済み

rand関数の割合変更

C言語プログラムでrand関数を使用して乱数を取得しているのですが、 取得できる値の範囲の割合を変更することは出来ないでしょうか? 例えば、0~10の範囲の乱数を取得するようにしている場合、 0~3の範囲の値が全体の10%、 3~8の範囲の値が全体の50%、 8~10の範囲の値が全体の40% といった割合で取得するようにはできないでしょうか? よろしくおねがいします

みんなの回答

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.4

まず、0~9の整数の乱数を求める。 0だったら、0~3(0≦x<3)の範囲の乱数を作る。 1~5だったら、0~5(0≦x<5)の範囲の乱数を作り、3を足す。結果、3~8(3≦x<8)の乱数が出来る。 6~9だったら、0~2(0≦x<2)の範囲の乱数を作り、8を足す。結果、8~10(8≦x<10)の乱数が出来る。

kikaisuga
質問者

お礼

なるほど、このようにやれば出来るのですね。 このような発想が苦手なので、感動しました。 ありがとうございます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

一様乱数から「そのような乱数」に変換する関数を書く.

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.2

3と8が重複しているようですが、論理的に破綻していないか確認しましょう。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

>0~3の範囲の値が全体の10%、 >3~8の範囲の値が全体の50%、 >8~10の範囲の値が全体の40% そういうロジックを自分で組む必要があります。例えば、 rand()で取得した値が0~3の範囲ならば10回に1回採用する、 という具合です。

関連するQ&A