Я думаю, вы запутались между генератором случайных целых чисел и генератором случайных чисел с плавающей точкой. В C ++ rand () генерирует случайное целое число от 0 до 32K. Таким образом, чтобы сгенерировать случайное число от 1 до 10, мы пишем rand ()% 10 + 1. Таким образом, чтобы сгенерировать случайное число из целого числа a в целое число b, пишем rand ()% (b - a + 1) + а.
Интервьюер сказал вам, что у вас есть генератор случайных чисел от 0 до 1. Это означает генератор чисел с плавающей точкой.
Как получить математический ответ:
- Переведите вопрос в простую форму, чтобы нижняя граница была равна 0.
- Масштабирование диапазона умножением
- Повторно перейти к требуемому диапазону.
Например: сгенерировать R такой, что
a <= R <= b.
Apply rule 1, we get a-a <= R - a <= b-a
0 <= R - a <= b - a.
Думайте, что R - a как R1. Как сгенерировать R1 так, чтобы R1 имел диапазон от 0 до (b-a)?
R1 = rand(0, 1) * (b-a) // by apply rule 2.
Теперь замените R1 на R - a
R - a = rand(0,1) * (b-a) ==> R = a + rand(0,1) * (b-a)
==== 2-й вопрос - без объяснения причин ====
У нас есть 1 <= R1 <= 5 </p>
==> 0 <= R1 - 1 <= 4
==> 0 <= (R1 - 1)/4 <= 1
==> 0 <= 6 * (R1 - 1)/4 <= 6
==> 1 <= 1 + 6 * (R1 - 1)/4 <= 7
Таким образом, Rand (1,7) = 1 + 6 * (rand (1,5) - 1) / 4