Тип 8 № 27539 
Перебор слов и системы счисления.Подсчет количества слов с ограничениями
i
Борис составляет 6-буквенные коды из букв Б, О, Р, И, С. Буквы Б и Р нужно обязательно использовать ровно по одному разу, букву С можно использовать один раз или не использовать совсем, буквы О и И можно использовать произвольное количество раз или не использовать совсем. Сколько различных кодов может составить Борис?
Решение. Найдём количество шестибуквенных слов, в которых есть ровно одна буква Б и ровно одна буква Р, тогда остаётся 4 позиции для размещения букв С, И, О.
1. Если 4 позиции занимают буквы О и И, при этом код не содержит буквы С, то получается 2 · 2 · 2 · 2 = 16 вариантов.
2. Если 4 позиции занимают буквы О, И и С, с учётом того, что буква С может использоваться только один раз, то получается 4 · 8 = 32 варианта.
При этом буква Б может стоять на любой из шести позиций, буква Р — на любой из оставшихся пяти позиций, всего 6 · 5 = 30 вариантов.
Тогда количество различных кодов: 30 · (16 + 32) = 1440.
Ответ: 1440.
Приведём решение на языке Python.
import itertools
alphabet = "БОРИС"
ar = itertools.product(alphabet, repeat=6) #Размещение с повторением
arl = []
for i in ar:
arl.append(list(i))
count = 0
for e in arl:
if e.count("Б") == 1 and e.count("Р") == 1 and e.count("С") <= 1:
count += 1
print(count)
Приведём решение Ильи Андрианова на языке Python.
from itertools import *
cnt = 0
for per in product('БОРИС', repeat=6):
slovo = ''.join(per)
if slovo.count('Б') == 1 and slovo.count('Р') == 1 and slovo.count('С') <= 1:
cnt += 1
print(cnt)
Приведём решение Сергея Донец на языке PascalABC.NET.
begin
'Б, О, Р, И, С'.Remove(', ').Cartesian(6)
.where(s->(s.CountOf('Б')=1))
.where(s->(s.CountOf('Р')=1))
.where(s->(s.CountOf('С')<=1))
.Count.Print;
end.
Ответ: 1440