Задания
Версия для печати и копирования в MS Word
Тип 8 № 46966
i

Свет­ла­на со­став­ля­ет коды из букв слова РО­СО­МА­ХА. Код дол­жен со­сто­ять из 8 букв, и каж­дая буква в нём долж­на встре­чать­ся столь­ко же раз, сколь­ко в за­дан­ном слове. Кроме того, в коде не долж­ны сто­ять рядом две глас­ные и две со­глас­ные буквы. Сколь­ко кодов может со­ста­вить Свет­ла­на?

Спрятать решение

Ре­ше­ние.

За­ме­тим, что ал­фа­вит со­сто­ит из 6 букв: Р, О, С, М, А, Х. Каж­дая буква долж­на встре­чать­ся в коде один раз, за ис­клю­че­ни­ем букв О и А  — они могут встре­чать­ся в коде два раза. Всего глас­ных букв  — 4, со­глас­ных букв  — 4.

По­ста­вим на первую по­зи­цию глас­ную букву, таких слов можно со­ста­вить 4 · 4 · 3 · 3 · 2 · 2 · 1 · 1  =  576. По­сколь­ку буквы О и А встре­ча­ют­ся в коде по 2 раза каж­дая, по­лу­чив­ше­е­ся ко­ли­че­ство слов не­об­хо­ди­мо по­де­лить на 4, тогда всего по­лу­ча­ем 144 слова.

Те­перь по­ста­вим на первую по­зи­цию со­глас­ную букву, таких слов можно со­ста­вить 4 · 4 · 3 · 3 · 2 · 2 · 1 · 1  =  576. По­сколь­ку буквы О и А встре­ча­ют­ся в коде по 2 раза каж­дая, по­лу­чив­ше­е­ся ко­ли­че­ство слов не­об­хо­ди­мо по­де­лить на 4, тогда всего по­лу­ча­ем 144 слова.

Таким об­ра­зом, ответ  — 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.


Аналоги к заданию № 46966: 47005 Все