Комбинаторика. Сколько всего возможных комбинаций из пяти чисел
Комбинаторика. Сколько всего возможных комбинаций из пяти чисел
Комбинаторика. Сколько всего возможных комбинаций из пяти чисел 12345, да 120, надо лишь эти числа между собой перемножить 1*2*3*4*5=120, но есть одно "но" нужно подсчитать еще и такие варианты как например 11234, 11123, 11112, 12234, 12333, 12222, 12344 и т.д., и как их всех вывести в экселе?
-
- Уже с Приветом
- Posts: 65206
- 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 и т.д., и как их всех вывести в экселе?
Re: Комбинаторика. Сколько всего возможных комбинаций из пяти чисел
забыл добавить что такого варианта как 11225 и 55555 в моих ситуациях быть не может, только 11223 и 11111 и еще в моей задачи такого варианта как 54123 или 12453 быть не может, только по возрастанию например 11123, 12223, 12344...
-
- Уже с Приветом
- Posts: 12003
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Комбинаторика. Сколько всего возможных комбинаций из пяти чисел
Вы как-то путанно объясняете, что именно вам нужно подсчитать. Попробую угадать. Если вы хотите подсчитать количество разных возрастающих последовательностей длины N, начинающихся с 1, и возрастать позволяется только на единичку, то ответ будет 2 ^ (N - 1). То есть в вашем случае 2 ^ 4 = 16.
-
- Уже с Приветом
- Posts: 12003
- 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: 10526
- 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: 12003
- 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)