Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 19, 2013 18:16:34

EchoXSpace
Зарегистрирован: 2013-01-19
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Комбинаторика

Привет!
Помогите пожалуйста с задачей:

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

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

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

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

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

UPD: пробовал сочетание с повторениями - не работает.

Отредактировано EchoXSpace (Янв. 19, 2013 18:24:13)

Офлайн

#2 Янв. 19, 2013 19:02:57

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Комбинаторика

“ также ожерелье можно переворачивать.”
Что это значит?
А если например “красный камень”,“зеленый”,“желтый” и “желтый”,“зеленый”,“красный” это одно и тоже ожерелье?

Отредактировано Singularity (Янв. 19, 2013 19:04:39)

Офлайн

#3 Янв. 19, 2013 19:04:27

EchoXSpace
Зарегистрирован: 2013-01-19
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Комбинаторика

aabb = bbaa
Полагаю, что считать за одно ожерелье.

Отредактировано EchoXSpace (Янв. 19, 2013 19:06:12)

Офлайн

#4 Янв. 19, 2013 19:06:51

EchoXSpace
Зарегистрирован: 2013-01-19
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Комбинаторика

Да, это одно и тоже ожерелье.

Отредактировано EchoXSpace (Янв. 19, 2013 19:08:28)

Офлайн

#5 Янв. 19, 2013 19:11:28

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Комбинаторика

EchoXSpace
Входные данные
5
2
Выходные данные
8:
это правильно? Если да то какие ожерелья выпустили? Не очень понятное условие что-то

Офлайн

#6 Янв. 19, 2013 19:12:29

EchoXSpace
Зарегистрирован: 2013-01-19
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Комбинаторика

Да я сам незнаю, если честно

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

Может быть, написан неправильный пример?

Отредактировано EchoXSpace (Янв. 19, 2013 19:14:42)

Офлайн

#7 Янв. 19, 2013 19:27:15

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Комбинаторика

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

Офлайн

#8 Янв. 19, 2013 19:51:51

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Комбинаторика

Мне кажется надо количество**цвета и вычитать количество перевороты о которых я спрашивал.
Если брать символы все просто, а вот придумать формулу чтобы без лишних вычислений не могу

Офлайн

#9 Янв. 19, 2013 20:20:25

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Комбинаторика

У меня сходится вроде

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)


А так работает ?

Отредактировано Singularity (Янв. 19, 2013 20:49:00)

Офлайн

#10 Янв. 19, 2013 20:26:40

EchoXSpace
Зарегистрирован: 2013-01-19
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Комбинаторика

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

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

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)))

Отредактировано EchoXSpace (Янв. 19, 2013 21:16:47)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version