-4

rand30()1~30を返す関数を書いてみてください。

あなたにはrand100()機能があります。

4

1 に答える 1

6

関数が整数を返すと仮定します。

int r = rand100();
while (r > 90) {
    r = rand100();
}
return 1 + (r - 1) % 30;

演算子%はモジュロを意味します。

100 個の入力数値を均一に分散したときに 30 個の出力数値を均一に分散するには、3 つの入力数値を 1 つの出力数値にマッピングするのが最善です。残りの 10 個の入力は破棄する必要があります。

rand100 を平均してどのくらいの頻度で呼び出しますか? 90%で1回 9%で2回 0.9%で3回 ...

平均は 1.111111

于 2013-01-08T14:45:35.917 に答える