Найти - Пользователи
Полная версия: Комбинаторика
Начало » Центр помощи » Комбинаторика
1 2 3
EchoXSpace
Привет!
Помогите пожалуйста с задачей:

Одна известная ювелирная фирма планирует выбросить на рынок новую партию ожерелий. Каждое ожерелье состоит из n камней, нанизанных на замкнутую нить, каждый камень может быть одного из k различных цветов. Но поскольку ни одна женщина в мире не захочет, чтобы у какой-нибудь другой женщины было такое же ожерелье, фирма планирует, что все выпущенные ожерелья будут различными. Камни можно свободно двигать по нитке, также ожерелье можно переворачивать. Помогите фирме определить, сколько ожерелий она сможет выпустить.

Формат входных данных

На вход программа получает два числа: количество камней на нитке n и количество допустимых цветов k. Оба числа натуральные. Кроме того, в силу особенностей технологического процесса производства ожерелий произведение nk не превосходит 32.
Формат выходных данных

Программа должна вывести единственное число: количество различных ожерелий из n камней k цветов.
Пример

Входные данные
1
1
Выходные данные
1
Входные данные
5
2
Выходные данные
8

UPD: пробовал сочетание с повторениями - не работает.
Singularity
“ также ожерелье можно переворачивать.”
Что это значит?
А если например “красный камень”,“зеленый”,“желтый” и “желтый”,“зеленый”,“красный” это одно и тоже ожерелье?
EchoXSpace
aabb = bbaa
Полагаю, что считать за одно ожерелье.
EchoXSpace
Да, это одно и тоже ожерелье.
sergeek
EchoXSpace
Входные данные
5
2
Выходные данные
8:
это правильно? Если да то какие ожерелья выпустили? Не очень понятное условие что-то
EchoXSpace
Да я сам незнаю, если честно

У меня получалось 6.

Может быть, написан неправильный пример?
sergeek
правильно скорей всего. Я таки понял условие, но что-то там слишком много всего в голове держать надо Надо на свежую голову ее
Singularity
Мне кажется надо количество**цвета и вычитать количество перевороты о которых я спрашивал.
Если брать символы все просто, а вот придумать формулу чтобы без лишних вычислений не могу
Singularity
У меня сходится вроде
def func(number, colour):
    if number*colour>32:
        print "Error!"
        return 0
    
    import string
    from itertools import product
    s_colour = string.ascii_lowercase[:colour]
    
    
    def produc_recursive(n):
        if n == 1 :
            return s_colour
        l = []
        for f,s in product(produc_recursive(n-1),s_colour):
            l.append(f+s)
        return l 
    all_product = produc_recursive(number)
    print all_product
    return len([ True for d in [x[::1] for x in all_product] if d in all_product])
        
    
print func(5,2)


А так работает ?
EchoXSpace
Камни можно свободно двигать по нитке, также ожерелье можно переворачивать.

Мне кажется, или все таки пример неправильный?
Или это способы создания ожерелий…

UPD: Код не рабочий - всегда выдает 8.
UPD2: Не совпадает с примером

Вот мой код (отчасти рабочий)
# Exercise № 2 "Necklace"
# Import lib
import math
# Function declaration
def calc(k, n):
    result = (math.factorial(k + n - 1)) / (math.factorial(k) * (math.factorial(n - 1)))
    return result
# Input var's
gems = int(input('Gem\'s count '))
color = int(input('Color\'s count '))
# Output
print (int(calc(gems, color)))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB