Реализуйте rand12 () с помощью rand6 () в одной строке
Учитывая функцию rand6 (), которая возвращает случайные числа от 1 до 6 с равной вероятностью, реализуйте однострочную функцию rand12 () с помощью rand6 (), которая возвращает случайные числа от 1 до 12 с равной вероятностью. Решение должно минимизировать количество вызовов метода rand6 (). Использование любых других библиотечных функций и арифметических операций с плавающей запятой запрещено.
Рекомендуется: сначала попробуйте свой подход в {IDE}, прежде чем переходить к решению.
Идея состоит в том, чтобы использовать выражение rand6 () + (rand6 ()% 2) * 6 . Он возвращает случайные числа от 1 до 12 с равной вероятностью. Выражение эквивалентно -
// если rand6 () четный если (rand6 ()% 2) возврат 6 + rand6 (); else // если rand6 () нечетное return rand6 ();
Мы также можем использовать любое из следующих выражений, которые работают аналогичным образом -
- rand6 () +! (rand6 ()% 2) * 6 или
- rand6 () + (rand6 () & 1) * 6 или
- rand6 () +! (rand6 () & 1) * 6
Ниже представлена реализация вышеупомянутой идеи на С ++ -
Выход:
100237 100202 99678 99867 100253 99929 100287 100449 99827 99298 100019 99954
Другое решение -
int rand12 () { возврат (rand6 () * 2) - (rand6 () & 1); }
rand6 () * 2 вернет четные числа 2, 4, 6, 8, 10 и 12 с равной вероятностью, а rand6 () & 1 вернет 0 или 1 на основе того, что rand6 () четное или нечетное соответственно. Итак, выражение (rand6 () * 2) - (rand6 () & 1) будет возвращать случайные числа от 1 до 12 с равной вероятностью.
Обратите внимание, что приведенные выше решения будут давать разные результаты каждый раз, когда мы их запускаем.
Эта статья предоставлена Адитьей Гоэлем . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью на сайте deposit.geeksforgeeks.org или отправить свою статью по электронной почте: grant@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.
Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.