задача
Если положительное целое число 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 будет более распространенным ...)