Комбинаторика. Сколько всего возможных комбинаций из пяти чисел
-
- Posts: 2
- Joined: 01 Sep 2019 01:27
Комбинаторика. Сколько всего возможных комбинаций из пяти чисел
Комбинаторика. Сколько всего возможных комбинаций из пяти чисел 12345, да 120, надо лишь эти числа между собой перемножить 1*2*3*4*5=120, но есть одно "но" нужно подсчитать еще и такие варианты как например 11234, 11123, 11112, 12234, 12333, 12222, 12344 и т.д., и как их всех вывести в экселе?
-
- Уже с Приветом
- Posts: 64661
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: Комбинаторика. Сколько всего возможных комбинаций из пяти чисел
120 это перестановки без повтора. А если разрешить номерам повторяться, то еще проще: 5*5*5*5*5, т.е. 3125 вариантов.Kom6iHatop wrote: ↑01 Sep 2019 01:47 Комбинаторика. Сколько всего возможных комбинаций из пяти чисел 12345, да 120, надо лишь эти числа между собой перемножить 1*2*3*4*5=120, но есть одно "но" нужно подсчитать еще и такие варианты как например 11234, 11123, 11112, 12234, 12333, 12222, 12344 и т.д., и как их всех вывести в экселе?
-
- Posts: 2
- Joined: 01 Sep 2019 01:27
Re: Комбинаторика. Сколько всего возможных комбинаций из пяти чисел
забыл добавить что такого варианта как 11225 и 55555 в моих ситуациях быть не может, только 11223 и 11111 и еще в моей задачи такого варианта как 54123 или 12453 быть не может, только по возрастанию например 11123, 12223, 12344...
-
- Уже с Приветом
- Posts: 11999
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Комбинаторика. Сколько всего возможных комбинаций из пяти чисел
Вы как-то путанно объясняете, что именно вам нужно подсчитать. Попробую угадать. Если вы хотите подсчитать количество разных возрастающих последовательностей длины N, начинающихся с 1, и возрастать позволяется только на единичку, то ответ будет 2 ^ (N - 1). То есть в вашем случае 2 ^ 4 = 16.
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 11999
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Комбинаторика. Сколько всего возможных комбинаций из пяти чисел
Как их вывести в Экселе я не знаю, но на Питоне можно напечатать вот так, например:
Code: Select all
def next_seq(l, n):
for i in range(len(l) - 1, 0, -1):
if l[i] == l[i - 1]:
l[i:] = [l[i] + 1] * (len(l) - i)
return True
return False
def print_all(n):
l = [1] * n
print(l)
while next_seq(l, n):
print(l)
print_all(5)
Если нужно сгенеить только конкретную какую-то i-тую последовательность, то можно это сделать, например, представив i в бинарном виде, где 1 означает увеличить следующе число, а 0 - оставить прежним.
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 10379
- Joined: 04 Feb 2004 14:14
- Location: Edgewater, NJ
Re: Комбинаторика. Сколько всего возможных комбинаций из пяти чисел
Посмотрел ваше решение и запустил. Решено с ошибками. Все числа начинатся с единицы. Во-вторых, выведенных вариантов гораздо меньше 120. Вот ваш вывод:M. Ridcully wrote: ↑01 Sep 2019 18:42Как их вывести в Экселе я не знаю, но на Питоне можно напечатать вот так, например:Это если нужно генерить все такие последовательности.Code: Select all
def next_seq(l, n): for i in range(len(l) - 1, 0, -1): if l[i] == l[i - 1]: l[i:] = [l[i] + 1] * (len(l) - i) return True return False def print_all(n): l = [1] * n print(l) while next_seq(l, n): print(l) print_all(5)
Если нужно сгенеить только конкретную какую-то i-тую последовательность, то можно это сделать, например, представив i в бинарном виде, где 1 означает увеличить следующе число, а 0 - оставить прежним.
Нужно решать с рекурсией (либо итеративно со стеком). Вот мое решение на Питоне, которое возращает нужную кучу комбинаций:[1, 1, 1, 1, 1]
[1, 1, 1, 1, 2]
[1, 1, 1, 2, 2]
[1, 1, 1, 2, 3]
[1, 1, 2, 2, 2]
[1, 1, 2, 2, 3]
[1, 1, 2, 3, 3]
[1, 1, 2, 3, 4]
[1, 2, 2, 2, 2]
[1, 2, 2, 2, 3]
[1, 2, 2, 3, 3]
[1, 2, 2, 3, 4]
[1, 2, 3, 3, 3]
[1, 2, 3, 3, 4]
[1, 2, 3, 4, 4]
[1, 2, 3, 4, 5]
Code: Select all
class Solution:
def __generateDigits(self, strResult, answer):
if len(strResult) == self.n:
answer.append(strResult)
return
for i in range(len(self.possibleDigits)):
self.__generateDigits(strResult + self.possibleDigits[i], answer)
def getPossibleNumberSequences(self, n):
self.n = n
self.possibleDigits = [str(x) for x in range(1, n + 1)]
answer = []
self.__generateDigits("", answer)
return answer
print(Solution().getPossibleNumberSequences(5))
-
- Уже с Приветом
- Posts: 11999
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Комбинаторика. Сколько всего возможных комбинаций из пяти чисел
Дык, вы почитайте повнимательнее, что я выше написал - я пытался понять, какую именно воследлательность требуется вывести.IvanGrozniy wrote: ↑06 Feb 2020 19:59Посмотрел ваше решение и запустил. Решено с ошибками. Все числа начинатся с единицы. Во-вторых, выведенных вариантов гораздо меньше 120. Вот ваш вывод:M. Ridcully wrote: ↑01 Sep 2019 18:42Как их вывести в Экселе я не знаю, но на Питоне можно напечатать вот так, например:Это если нужно генерить все такие последовательности.Code: Select all
def next_seq(l, n): for i in range(len(l) - 1, 0, -1): if l[i] == l[i - 1]: l[i:] = [l[i] + 1] * (len(l) - i) return True return False def print_all(n): l = [1] * n print(l) while next_seq(l, n): print(l) print_all(5)
Если нужно сгенеить только конкретную какую-то i-тую последовательность, то можно это сделать, например, представив i в бинарном виде, где 1 означает увеличить следующе число, а 0 - оставить прежним.[1, 1, 1, 1, 1]
[1, 1, 1, 1, 2]
[1, 1, 1, 2, 2]
[1, 1, 1, 2, 3]
[1, 1, 2, 2, 2]
[1, 1, 2, 2, 3]
[1, 1, 2, 3, 3]
[1, 1, 2, 3, 4]
[1, 2, 2, 2, 2]
[1, 2, 2, 2, 3]
[1, 2, 2, 3, 3]
[1, 2, 2, 3, 4]
[1, 2, 3, 3, 3]
[1, 2, 3, 3, 4]
[1, 2, 3, 4, 4]
[1, 2, 3, 4, 5]
Если все возможные перестановки, то и мучаться не надо:
Code: Select all
from itertools import permutations
print(list(permutations(range(1, 6))))
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 8230
- Joined: 06 Feb 2002 10:01
- Location: NJ, USA
Re: Комбинаторика. Сколько всего возможных комбинаций из пяти чисел
Вы хотите вот это?
Code: Select all
for a in range(1,6):
for b in range(a,6):
for c in range(b,6):
for d in range(c, 6):
for e in range (d, 6):
print(a,b,c,d,e)