- 締切済み
rand関数の割合変更
C言語プログラムでrand関数を使用して乱数を取得しているのですが、 取得できる値の範囲の割合を変更することは出来ないでしょうか? 例えば、0~10の範囲の乱数を取得するようにしている場合、 0~3の範囲の値が全体の10%、 3~8の範囲の値が全体の50%、 8~10の範囲の値が全体の40% といった割合で取得するようにはできないでしょうか? よろしくおねがいします
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- 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)の乱数が出来る。
- 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回採用する、 という具合です。
お礼
なるほど、このようにやれば出来るのですね。 このような発想が苦手なので、感動しました。 ありがとうございます。