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

По­ли­на со­став­ля­ет 6-⁠бук­вен­ные коды из букв П, О, Л, И, Н, А. Каж­дую букву нужно ис­поль­зо­вать ровно 1 раз, при этом нель­зя ста­вить под­ряд две глас­ные или две со­глас­ные. Сколь­ко раз­лич­ных кодов может со­ста­вить По­ли­на?

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

Ре­ше­ние.

За­ме­тим, что по­сколь­ку глас­ных и со­глас­ных по­ров­ну, слово может на­чи­нать­ся с как с со­глас­ной, так и с глас­ной. Также учтём то, что каж­дую букву нужно ис­поль­зо­вать толь­ко один раз.

По­ста­вим на пер­вое место любую из трёх со­глас­ных. На вто­рое  — любую из трех глас­ных. На тре­тье  — любую из двух остав­ших­ся со­глас­ных. На чет­вер­тое  — любую из двух остав­ших­ся глас­ных. На пятое  — одну остав­шу­ю­ся со­глас­ную. На ше­стое  — одну остав­шу­ю­ся глас­ную. По пра­ви­лу про­из­ве­де­ния, со­от­вет­ству­ю­щие ко­ли­че­ства спо­со­бов пе­ре­мно­жа­ем. Учи­ты­вая, что на пер­вое место можно по­ста­вить как со­глас­ную, так и глас­ную, По­ли­на может со­ста­вить 2 · 3 · 3 · 2 · 2 · 1 · 1  =  72 раз­лич­ных кода.

 

Ответ: 72.

 

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

import itertools

alphabet = "ПО­ЛИ­НА"

con = "ПЛН"

vol = "ОИА"

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

arl = []

for e in ar:

arl.append(list(e))

count = 0

for e in arl:

flag = True

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

if (e[i] in con and e[i+1] in con) or (e[i+1] in vol and e[i] in vol):

flag = False

if flag:

count += 1

print(count)

 

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

from itertools import *

count = 0

for p in permutations('ПО­ЛИ­НА'):

slovo = ''.join(p)

slovo = slovo.replace('Л', 'П').replace('Н', 'П')

slovo = slovo.replace('О', 'А').replace('И', 'А')

if 'ПП' not in slovo and 'АА' not in slovo:

count += 1

print(count)

 

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

from itertools import product

al1='ПЛН'

al2='ОИА'

s=product(al1,al2,al1,al2,al1,al2)

k=0

for i in s:

p=''.join(i)

if p.count('П')==1 and p.count('О')==1 and p.count('Л')==1 and p.count('И')==1 and p.count('Н')==1 and p.count('А')==1:

k+=1

print(k*2)

 

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

begin

'П, О, Л, И, Н, А'.Remove(', ').Permutations(6)

.where(s->'ОИА'.Permutations(2).all(d->d not in s))//нель­зя две глас­ные под­ряд

.where(s->'ПЛН'.Permutations(2).all(d->d not in s))//нель­зя две со­глас­ные под­ряд

.Count.Print;

end.


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

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