Завдання
З огляду на додатне ціле число 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 буде більш поширеним ...)