Завдання
З огляду на додатне ціле число n
менше 2^30
вказаного як введення будь-яким обраним вами способом, ваш код повинен виводити випадкове ціле число між 0
і n
, включно. Кількість, яку ви генеруєте, слід вибирати рівномірно випадково . Це кожне значення від 0
до n
повинно відбуватися з однаковою ймовірністю (див. Правила та застереження).
Правила та застереження
Ваш код може припускати, що будь-який генератор випадкових чисел, вбудований у вашу мову або стандартну бібліотеку, який стверджує, що є рівномірно випадковим, насправді є рівномірним. Тобто вам не доведеться турбуватися про якість випадкового джерела, яке ви використовуєте. Однак,
- Ви повинні встановити , що якщо випадковий джерело , який ви використовуєте рівномірний , то ваш код правильно виводить рівномірний випадкове число від
0
доn
. - Будь-які аргументи при виклику вбудованої або бібліотечної випадкової функції повинні бути постійними. Тобто вони повинні бути повністю незалежними від вхідного значення.
- Ваш код може припинятися з ймовірністю 1, а не гарантовано припиняти його.
Примітки
randInt(0,n)
недійсний, оскільки він приймає дані як аргумент вбудованої або бібліотечної функції.rand()%n
буде НЕ дають рівномірне випадкове число в цілому. Як приклад, поданий betseg, якщоintmax == 15
іn = 10
, тоді ви будете набагато більше шансів отримати0-5
ніж6-10
.floor(randomfloat()*(n+1))
також не даватиме рівномірного випадкового числа в цілому через кінцеве число різних можливих значень з плаваючою точкою між 0 і 1.
rng()
передбачає0
-100
, якщоn = 75
і функція єrng()%75
, то 0-25 буде більш поширеним ...)