реализация комбинаторики и головоломки - PullRequest
5 голосов
/ 28 января 2011

enter image description here

Нашел эту загадку внутри изображения. По моему мнению, общее количество способов должно быть

2*comb(7,i) for i <- 1 to 7, где comb определяется следующим образом. Мой подход правильный? Меня интересует результат, который я получаю, а не функция, написанная ниже.

def comb(N,k): 
    if (k > N) or (N < 0) or (k < 0):
        return 0L
    N,k = map(long,(N,k))
    top = N
    val = 1L
    while (top > (N-k)):
        val *= top
        top -= 1
    n = 1L
    while (n < k+1L):
        val /= n
        n += 1
    return val

Не против, чтобы я задавал слишком много вопросов за короткий промежуток времени. Я просто в восторге.

1 Ответ

6 голосов
/ 28 января 2011

Есть 7!способы выстроить детей в ряд (7 вариантов на первое место, 6 на второе, 5 на третье и т. д.)

Каждый ребенок может быть лицом внутрь или наружу.Это как дополнительный бит для каждой позиции.Так что умножьте на 2 ** 7.(то есть есть 2 варианта для каждого места).

Теперь для каждого заказа, если вы вращаете круг, вы получаете "тот же" порядок.Есть 7 поворотов, которые производят одинаковое упорядочение, поэтому разделите на 7.

Ответ 2 ** 7 * 7! / 7 = 128 * 6!= 92160.

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