Как пользоваться Поиском

поиск по сайту
логин

пароль

регистрация     
забыли пароль?

Помощь сайту

Вопросы » Комбинаторика,вероятность » Cколькими способами можно разложить 7 монет по трём карманам так, чтобы ни один карман не был пустым?

Cколькими способами можно разложить 7 монет по трём карманам так, чтобы ни один карман не был пустым?

создана: 24.03.2023 в 18:45
................................................

 ( +47 ) 

:

Cколькими способами можно разложить 7 монет по трём карманам так,

чтобы ни один карман не был пустым?

По двум карманам легко, есть решение 

http://postupivuz.ru/vopros/14167.htm

 ( +3 ) 
27.03.2023 07:11
Комментировать Верное решение
(баллы:+3)

1) 115

2) 151

3) 124

4) 142

5) 133

6) 223

7) 232

8) 214

9) 241

10) 313

11) 331

12) 322

13) 412

14) 421

15) 511       Ответ:15 способов

 ( +3192 ) 
27.03.2023 11:01
Комментировать

Всё верно.   Wink

 ( +10 ) 
27.03.2023 16:21
Комментировать Верное решение
(баллы:+10)

Здравствуйте, anfisa.

Вашу задачу можно решить вручную либо с использованием некоторого программного обеспечения. Показываю решение вручную: В первый карман можно положить 1, 2, 3, 4, 5 монет, во второй карман тогда можно положить 1, 2, 3, 4, 5, а в третий карман можно положить 1, 2, 3, 4, 5 монет. В итоге получаются следующие наборы (первая цифра - количество монет, которое можно положить в первый карман, вторая цифра - количество монет, которое можно положить во второй карман, третья цифра - количество монет, которое можно положить в третий карман) 

1) 1 1 5

2) 1 5 1 

3) 1 2 4

4) 1 4 2

5) 1 3 3

6) 2 2 3

7) 2 3 2

8) 2 1 4

9) 2 4 1

10) 3 1 3

11) 3 3 1

12) 3 2 2

13) 4 1 2

14) 4 2 1

15) 5 1 1

Следовательно, существует 15 способов разложения 7 монет в 3 кармана так, чтобы ни один карман не остался пустым. Ответ: 15.

Решить эту задачу поможет библиотека itertools, которая устанавливается вместе с языком программирования Python.

from itertools import * # подключаю модуль itertools

alphabet = ′1234567′ # присваиваю переменной alphabet всё множество монет

count = 0 # создаю счётчик, который подсчитает комбинации, удовлетворяющие условию задачи

combinations = [] # создаю пустой список, в который буду заносить все подходящие комбинации 

for i in product(alphabet, repeat = 3): # использую комбинаторный генератор product, который будет перебирать все возможные трёхзначные комбинации в переменной alphabet (так как карманов 3, то в параметр repeat (в переводе с английского языка - повторять) вносим значение 3)     

   combinations = ′′.join(i) # в пустой список заношу все существующие комбинации монет в трёх карманах (таких комбинаций будет 7³= 343), которые ещё не удовлетворяют условию задачи, а использование этой синтаксической конструкции .join(i) обусловлено стремлением выводить комбинации в более приятном виде (моё субъективное мнение) (здесь ещё осуществляется перевод из кортежа (последовательность элементов, разделённых запятой и заключённых в скобки; неизменяемый и структурированный тип данных) в строчный тип данных)    

  if int(combinations[0]) + int(combinations[1]) + int(combinations[-1]) == 7: # в условии задачи сказано, что нужно использовать 7 монет, следовательно, сумма монет, которые необходимо разложить по трём карманам должна быть равна 7, поэтому я и задаю именно такое условие (чтобы программа работала корректно, я перевожу строчный тип данных в целые числа, а цифры в квадратных скобках обозначают индекс элемента: [0] - первый, [1] - второй, [-1] - третий)    

   count += 1 # счётчик увеличиваю на единицу, потому что списке combinations теперь появились нужные комбинации, которые и надобно подсчитать    

   print(i, combinations) # вывожу полученные комбинации в формате кортежа и целых чисел, чтобы убедиться в правильности работы программного кода 

print("Ответ к задаче:", count) # печатаю ответ к задаче

Для Вашего удобства отправлю снова ту же самую программу без каких - либо объяснений:

from itertools import *

alphabet = ′1234567′

count = 0

combinations = []

for i in product(alphabet, repeat = 3):      

combinations = ′′.join(i)      

if int(combinations[0]) + int(combinations[1]) + int(combinations[-1]) == 7:           count += 1          

    print (i, combinations)

print ("Ответ к задаче:", count)

Результат работы программы: 

(1, 1, 5) 115

(1, 2, 4) 124

(1, 3, 3) 133

(1, 4, 2) 142

(1, 5, 1) 151

(2, 1, 4) 214

(2, 2, 3) 223

(2, 3, 2) 232

(2, 4, 1) 241

(3, 1, 3) 313

(3, 2, 2) 322

(3, 3, 1) 331

(4, 1, 2) 412

(4, 2, 1) 421

(5, 1, 1) 511

Ответ к задаче: 15

 ( +3192 ) 
27.03.2023 21:31
Комментировать

var a: integer;        //  прога на PascalABC.NET

begin

  for var i:=1 to 5 do 

    for var j:=1 to 5 do

      for var k:=1 to 5 do

        if i+j+k=7 then begin

          writeln (i,j,k,   ); a+=1;

        end;  

  print(a);

end.

115  124  133  142  151  214  223  232  241  313  322  331  412  421  511

15 - ответ

 ( +3192 ) 
27.03.2023 23:32
Комментировать

## решение на Python

from itertools import *

count = 0

comb = []

for i in product(′12345′, repeat = 3):    

    comb = ’ ’.join(i)

    if int (comb[0]) + int (comb[1]) + int (comb[2]) == 7:

        count += 1         

        print (i, comb)                    ##  вывод троек чисел

print ("Ответ к задаче:", count)

Хочу написать ответ