rand30()
1~30を返す関数を書いてみてください。
あなたにはrand100()
機能があります。
関数が整数を返すと仮定します。
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