アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語プログラムでrand関数を使用して乱数を取得しているのですが、
取得できる値の範囲の割合を変更することは出来ないでしょうか?

例えば、0~10の範囲の乱数を取得するようにしている場合、
0~3の範囲の値が全体の10%、
3~8の範囲の値が全体の50%、
8~10の範囲の値が全体の40%
といった割合で取得するようにはできないでしょうか?

よろしくおねがいします

A 回答 (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)の乱数が出来る。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/11/20 19:43

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

    • good
    • 0

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

    • good
    • 0

>0~3の範囲の値が全体の10%、


>3~8の範囲の値が全体の50%、
>8~10の範囲の値が全体の40%

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

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