Есть ли более простой способ решить проблему с помощью Python - PullRequest
0 голосов
/ 06 ноября 2019

Проблема с Python: используйте симуляции для оценки вероятности того, что двое из N человек в комнате имеют одинаковый день рождения. Гарантируется, что 2 <= N <= 30. </p>

Это своего рода пример:

import math 

# Returns approximate number of  
# people for a given probability 
def find( p ): 
    return math.ceil(math.sqrt(2 * 365 *
                     math.log(1/(1-p)))); 

# Driver Code 
print(find(0.70)) 

Вывод 30

1 Ответ

0 голосов
/ 15 ноября 2019

Думаю, вы неправильно поняли свою задачу. Исходя из поставленного вопроса, я ожидаю, что правильное решение будет выглядеть примерно так:

import random

def contains_duplicates(X):
    seen = set()
    seen_add = seen.add
    for x in X:
        if (x in seen or seen_add(x)):
            return True
    return False


def approximateProbability(num_people, num_tests):
    tests = [[random.randint(1,365) for _ in range(num_people)] for _ in range(num_tests)]
    results = [contains_duplicates(x) for x in tests]
    return results.count(True)/len(results)

# Testing with 23 people and 1000 tests - should return about 0.5
print(approximateProbability(23,1000))

Этот код принимает число людей (N) и количество выполняемых имитаций и выводит процентсимуляции, в которых один или несколько человек праздновали день рождения.

Если это не то, что вы хотели, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...