Светлана составляет коды из букв слова РОСОМАХА. Код должен состоять из
Заметим, что алфавит состоит из
Поставим на первую позицию гласную букву, таких слов можно составить 4 · 4 · 3 · 3 · 2 · 2 · 1 · 1 = 576. Поскольку
Теперь поставим на первую позицию согласную букву, таких слов можно составить 4 · 4 · 3 · 3 · 2 · 2 · 1 · 1 = 576. Поскольку
Таким образом, ответ — 144 + 144 = 288.
Ответ: 288.
Приведём аналитическое решение Юрия Красильникова.
Из условия ясно, что либо все согласные стоят на чётных местах, а гласные - на нечётных, либо наоборот.
Число способов поставить 4 различные согласные на 4 места, очевидно, 4!, т. е. 24.
Число способов выбрать два места из четырёх для двух гласных «А» - число сочетаний из 4 по 2, т. е.4 · 3/(1 · 2)=6.
(Или по формуле перестановок с повторениями, две пары, всего 4 буквы, перестановок 4!/(2! · 2!)=6.)
Для случая ГСГСГСГС имеем 24 · 6=144 варианта, для случая СГСГСГСГ - столько же, итого 2 · 144=288.
Приведём решение на языке Python.
import itertools
alphabet = "РОСОМАХА"
vol = "ОА"
con = "РСМХ"
ar = itertools.permutations(alphabet, 8) #Размещение
arl = []
for e in ar:
arl.append(list(e))
a = set()
for e in arl:
flag = True
s = ""
for i in range(len(e)-1):
s += e[i]
if (e[i] in vol and e[i+1] in vol) or (e[i] in con and e[i+1] in con):
flag = False
if flag:
a.add(s)
print(len(a))
Приведём другое решение на языке Python.
g=['О','А',]
sog=['Р','С','М','Х']
n=0
for b1 in g:
for b2 in sog:
for b3 in g:
for b4 in sog:
for b5 in g:
for b6 in sog:
for b7 in g:
for b8 in sog:
s=b1+b2+b3+b4+b5+b6+b7+b8
if s.count('Р')==1 and s.count('О')==2 and s.count('С')==1 and s.count('М')==1 and s.count('А')==2 and s.count('Х')==1:
n+=1
print(n*2) # Так как решение для случая, когда первая буква гласная, умножаем на 2, для случая когда первая буква согласная
Приведём решение Бориса Савельева на языке Python.
from itertools import permutations
s = permutations('POCOMAXA', 8)
cnt = 0
for i in s:
p = ''.join(i)
if p.count('PC')==0 and p.count('PM')==0 and p.count('PX')==0:
if p.count('CP') == 0 and p.count('CM') == 0 and p.count('CX') == 0:
if p.count('MP') == 0 and p.count('MC') == 0 and p.count('MX') == 0:
if p.count('XP') == 0 and p.count('XC') == 0 and p.count('XM') == 0:
if p.count('OO') == 0 and p.count('OA') == 0 and p.count('AO') == 0 and p.count('AA') == 0:
cnt += 1
print(cnt//4)
Приведём решение Юрия Красильникова на языке Python.
def good(word):
return all([c in 'АО' for c in word[0::2]]) or all([c in 'АО' for c in word[1::2]])
import itertools
w = list(set([''.join(p) for p in itertools.permutations('РОСОМАХА')]))
r = [x for x in w if good(x)]
print(len(r))
Приведём решение Сергея Донец на языке PascalABC.NET.
begin
'РОСОМАХА'.Permutations(8).Distinct
.Where(s -> not s.IsMatch('[ОА]{2}')) // Нет двух гласных подряд
.Where(s -> not s.IsMatch('[РСМХ]{2}')) // Нет двух согласных подряд
.Count.Print;
end.
Светлана составляет коды из букв слова ПАРАБОЛА. Код должен состоять из
Заметим, что алфавит состоит из
Поставим на первую позицию гласную букву, таких слов можно составить 4 · 4 · 3 · 3 · 2 · 2 · 1 · 1 = 576. Поскольку
Теперь поставим на первую позицию согласную букву, таких слов можно составить 4 · 4 · 3 · 3 · 2 · 2 · 1 · 1 = 576. Поскольку
Таким образом, ответ — 96 + 96 = 192.
Ответ: 192.
Приведём другое решение на языке Python.
import itertools
alphabet = "ПАРАБОЛА"
vol = "ОА"
con = "ПРБЛ"
ar = itertools.permutations(alphabet, 8) #Размещение
arl = []
for e in ar:
arl.append(list(e))
a = set()
for e in arl:
flag = True
s = ""
for i in range(len(e)-1):
s += e[i]
if (e[i] in vol and e[i+1] in vol) or (e[i] in con and e[i+1] in con):
flag = False
if flag:
a.add(s)
print(len(a))
Приведём решение Ильи Андрианова на языке Python.
from itertools import permutations
s1 = 'ПРБЛ'
s2 = 'АО'
count = set()
for var in permutations('ПАРАБОЛА', 8):
slovo = ''.join(var)
if all((slovo[i] in s1 and slovo[i+1] in s2) or (slovo[i+1] in s1 and slovo[i] in s2) for i in range(len(slovo)-1)):
count.add(slovo)
print(len(count))
Приведём решение Бориса Савельева на языке Python.
from itertools import product
sog = 'ПРБЛ'
gl = 'ОА'
s = product(sog,gl,sog,gl,sog,gl,sog,gl)
count = 0
for i in s:
p=''.join(i)
if p.count('П') == p.count('Р') == p.count('Б') == p.count('Л') == p.count('О') == 1 and p.count('А')== 3:
count += 1
print(count*2)
Приведём решение Ивана Новикова на языке Python.
from itertools import *
cnt = 0
gs = 'АО'
sgl = 'ПРБЛ'
gs_ix = [0, 2, 4, 6]
sgl_ix = [1, 3, 5, 7]
for i in permutations('ПАРАБОЛА',8):
a = ''.join(i)
if all(a[i] in gs for i in gs_ix) or all(a[i] in sgl for i in sgl_ix):
cnt += 1
print(cnt/3)
Приведём решение Сергея Донец на языке PascalABC.NET.
begin
var word := 'ПАРАБОЛА';
var count := word.Permutations(word.Length).Distinct
.Where(s -> not s.IsMatch('[АО]{2}')) // Нет двух гласных подряд
.Where(s -> not s.IsMatch('[ПРБЛ]{2}')) // Нет двух согласных подряд
.Count.Print;
end.
Наверх

