Реализуйте rand12 () с помощью rand6 () в одной строке

Опубликовано: 20 Января, 2022

Учитывая функцию 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.

РЕКОМЕНДУЕМЫЕ СТАТЬИ