Рубрики

Генерация целого числа от 1 до 7 с равной вероятностью

Учитывая функцию foo (), которая возвращает целые числа от 1 до 5 с равной вероятностью, напишите функцию, которая возвращает целые числа от 1 до 7 с равной вероятностью, используя только foo (). Минимизируйте количество вызовов метода foo (). Кроме того, использование любой другой библиотечной функции не допускается, арифметика с плавающей запятой не допускается.

Решение :
Мы знаем, что foo () возвращает целые числа от 1 до 5. Как мы можем гарантировать, что целые числа от 1 до 7 встречаются с равной вероятностью?
Если мы как-то сгенерируем целые числа от 1 до a-кратного-7 (например, 7, 14, 21, …) с равной вероятностью, мы можем использовать деление по модулю на 7 с последующим добавлением 1, чтобы получить числа от 1 до 7 с равными вероятность.

Мы можем генерировать от 1 до 21 с равной вероятностью, используя следующее выражение.

 5*foo() + foo() -5 

Посмотрим, как можно использовать вышеприведенное выражение.
1. Для каждого значения first foo () может быть 5 возможных комбинаций для значений second foo (). Таким образом, есть всего 25 возможных комбинаций.
2. Диапазон значений, возвращаемых вышеприведенным уравнением, составляет от 1 до 25, каждое целое число встречается ровно один раз.
3. Если значение уравнения окажется меньше 22, верните деление по модулю на 7 с последующим добавлением 1. В противном случае снова вызовите метод рекурсивно. Таким образом, вероятность возврата каждого целого числа становится 1/7.

Приведенная ниже программа показывает, что выражение возвращает каждое целое число от 1 до 25 ровно один раз.

C ++

#include <stdio.h>

  

int main()

{

    int first, second;

    for ( first=1; first<=5; ++first )

        for ( second=1; second<=5; ++second )

            printf ("%d \n", 5*first + second - 5);

    return 0;

}

Джава

// Java-код для демонстрации
// выражение возвращает каждое целое число
// от 1 до 25 ровно один раз

  

class GFG {

    public static void main(String[] args)

    {

        int first, second;

        for ( first=1; first<=5; ++first )

            for ( second=1; second<=5; ++second )

            System.out.printf ("%d \n", 5*first + second - 5);

    }

}

  
// Этот код предоставлен
// Смита Динеш Семвал

python3

# Python3 код для демонстрации
# выражение возвращает каждое целое число
# от 1 до 25 ровно один раз

  

if name == '__main__':

      

    for first in range(1, 6):

        for second in range(1, 6):

                print(5 * first + second - 5)

  
# Этот код предоставлен Смитой Динеш Семвал.

C #

// код C # для демонстрации возвращаемых выражений
// каждое целое число от 1 до 25 ровно один раз

using System;

  

class GFG {

      

    public static void Main()

    {

        int first, second;

  

        for ( first = 1; first <= 5; ++first )

            for ( second = 1; second <= 5; ++second )

                Console.WriteLine ( 5*first + second - 5);

    }

}

  
// Этот код предоставлен Sam007.

PHP

<?php
// PHP программа для генерации целых чисел
// от 1 до 7 с равной вероятностью

  

    $first

    $second;

    for ( $first = 1; $first <= 5; ++$first )

        for ( $second = 1; $second <= 5; ++$second )

            echo 5 * $first + $second - 5, "\n";

  
// Этот код предоставлен ajit.
?>


Выход :

1
2
.
.
24
25

Приведенная ниже программа показывает, как мы можем использовать foo () для возврата от 1 до 7 с равной вероятностью.

C ++

// C ++ программа для генерации целых чисел из
// от 1 до 5 с равной вероятностью
#include <stdio.h>

  
// данный метод, который возвращает от 1 до 5 с равной вероятностью

int foo() 

{

    // некоторый код здесь

}

  

int my_rand() // возвращает от 1 до 7 с равной вероятностью

{

    int i;

    i = 5*foo() + foo() - 5;

    if (i < 22)

        return i%7 + 1;

    return my_rand();

}
// Код драйвера

int main()

{

    printf ("%d ", my_rand());

    return 0;

}

Джава

// Java-программа для генерации целых чисел из
// от 1 до 5 с равной вероятностью

class GfG 

{

  
// данный метод, который возвращает от 1 до 5 с равной вероятностью

static int foo() 

    // некоторый код здесь

    return 0;

  
// возвращает от 1 до 7 с равной вероятностью

public static int my_rand()  

    int i; 

    i = 5*foo() + foo() - 5

    if (i < 22

        return i%7 + 1

    return my_rand(); 

  
// Код драйвера

public static void main (String[] args) { 

  

    System.out.println(my_rand()); 

}

python3

# Python3 программа для генерации целых чисел
# от 1 до 5 с равной вероятностью
# данный метод, который возвращает от 1 до 5
# с равной вероятностью

def foo():

  

    # некоторый код здесь

    return 0;

  
# возвращает от 1 до 7 с равной вероятностью

def my_rand(): 

    i = 0;

    i = (5 * foo()) + (foo() - 5);

    if (i < 22):

        if(i < 0):

            return (i % 7 - 7) + 1;

        else:

            return (i % 7) + 1;

              

    return my_rand();

  
# Код драйвера

if __name__ == '__main__':

    print(my_rand());

  
# Этот код предоставлен PrinciRaj1992

C #

// C # программа для генерации целых чисел из
// от 1 до 5 с равной вероятностью

using System;

class GfG 

{

   
// данный метод, который возвращает от 1 до 5 с равной вероятностью

static int foo() 

    // некоторый код здесь

    return 0;

   
// возвращает от 1 до 7 с равной вероятностью

public static int my_rand()  

    int i; 

    i = 5*foo() + foo() - 5; 

    if (i < 22) 

        return i%7 + 1; 

    return my_rand(); 

   
// Код драйвера

public static void Main () { 

   

    Console.Write(my_rand()+"\n"); 

}

PHP

<?php
// PHP программа для генерации целых чисел из
// от 1 до 5 с равной вероятностью
// данный метод, который возвращает от 1 до 5
// с равной вероятностью

function foo() 

{

    // некоторый код здесь

}

  
// возвращает от 1 до 7 с равной вероятностью

function my_rand() 

{

    $i;

    $i = 5 * foo() + foo() - 5;

    if ($i < 22)

        return $i % 7 + 1;

    return my_rand();

}

  
// Код драйвера

echo my_rand();

  
// Этот код предоставлен Tushil.
?>


Выход:

-4

Эта статья составлена Aashish Barnwal и рецензирована командой GeeksforGeeks. Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Генерация целого числа от 1 до 7 с равной вероятностью

0.00 (0%) 0 votes