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

Мат­вей со­став­ля­ет 6-⁠бук­вен­ные коды из букв М, А, Т, В, Е, Й. Каж­дую букву нужно ис­поль­зо­вать ровно 1 раз, при этом код не может на­чи­нать­ся с буквы Й и не может со­дер­жать со­че­та­ния АЕ. Сколь­ко раз­лич­ных кодов может со­ста­вить Мат­вей?

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

Ре­ше­ние.

Сна­ча­ла найдём общее ко­ли­че­ство воз­мож­ных слов. По­сколь­ку на пер­вое место можно по­ста­вить любую букву, кроме Й, общее ко­ли­че­ство воз­мож­ных слов рав­ня­ет­ся 5 · 5 · 4 · 3 · 2 · 1  =  600. Те­перь опре­де­лим, сколь­ко слов со­дер­жат со­че­та­ние АЕ. Пусть слово на­чи­на­ет­ся с АЕ, тогда ко­ли­че­ство ва­ри­ан­тов рав­ня­ет­ся 1 · 1 · 4 · 3 · 2 · 1  =  24. Пусть АЕ  — это вто­рая и тре­тья буквы слова, тогда ко­ли­че­ство ва­ри­ан­тов рав­ня­ет­ся 3 · 1 · 1  · 3 · 2 · 1  =  18. Пусть АЕ  — это тре­тья и четвёртая буквы слова, тогда ко­ли­че­ство ва­ри­ан­тов рав­ня­ет­ся 3 · 3 · 1 · 1 · 2 · 1  =  18. В слу­чае, когда АЕ  — это четвёртая и пятая буквы слова, ко­ли­че­ство ва­ри­ан­тов рав­ня­ет­ся 3 · 3 · 2 · 1 · 1 · 1  =  18. В слу­чае, когда АЕ  — это пятая и ше­стая буквы слова, ко­ли­че­ство ва­ри­ан­тов рав­ня­ет­ся 3 · 3 · 2 · 1 · 1 · 1  =  18. Таким об­ра­зом, ко­ли­че­ство кодов, ко­то­рые может со­ста­вить Мат­вей, рав­ня­ет­ся 600 − 24 − 18 − 18 − 18 − 18  =  504.

 

Ответ: 504.

 

При­ведём дру­гое ре­ше­ние на языке Python.

import itertools

alphabet = "МАТ­ВЕЙ"

ar = itertools.permutations(alphabet) #Пе­ре­ста­нов­ка

arl = []

for i in ar:

arl.append(list(i))

count = 0

for e in arl:

flag = True

for i in range(len(e) - 1):

if e[0] == 'Й' or (e[i] == 'А' and e[i + 1] == 'Е'):

flag = False

if flag == True: count += 1

print(count)

 

При­ведём ре­ше­ние Ми­ха­и­ла Глин­ский на языке Python.

al='МАТ­ВЕЙ'

k=0

for b1 in 'МАТВЕ':

for b2 in al:

for b3 in al:

for b4 in al:

for b5 in al:

for b6 in al:

s=b1+b2+b3+b4+b5+b6

bb=set(s)

if len(s)==len(bb) and s.count('АЕ')==0:

k+=1

print(k)

 

При­ведём дру­гое ре­ше­ние на языке Python.

def func(not_used, pre=''):

if 'АЕ' in pre: # Не долж­но вклю­чать АЕ

return 0

if pre[:1] == 'Й': # Не долж­но на­чи­нать­ся с Й

return 0

if not_used == '': # Если все буквы ис­поль­зо­ва­ны

return 1 # Счи­та­ем как один из ва­ри­ан­тов

count = 0

for letter in not_used:

count += func(not_used.replace(letter, ''), pre + letter)

return count

print(func('МАТ­ВЕЙ'))

 

При­ведём ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

import itertools

codes = [''.join(p) for p in itertools.permutations('МАТ­ВЕЙ')]

codes2 = [w for w in codes if w[0]!='Й' and not 'АЕ' in w]

print(len(codes2))

 

При­ведём ре­ше­ние Сер­гея Донец на языке PascalABC.NET.

begin

'МАТ­ВЕЙ'.Permutations

.Count(s->(s[1]<>'Й')and('АЕ' not in s))

.Print;

end.


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

Раздел кодификатора ФИПИ: 1.6.1 Фор­ма­ли­за­ция по­ня­тия ал­го­рит­ма