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

Ге­ра­сим со­став­ля­ет 7-⁠бук­вен­ные коды из букв Г, Е, Р, А, С, И, М. Каж­дую букву нужно ис­поль­зо­вать ровно 1 раз, при этом нель­зя ста­вить под­ряд две глас­ные или две со­глас­ные. Сколь­ко раз­лич­ных кодов может со­ста­вить Ге­ра­сим?

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

Ре­ше­ние.

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

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

 

Ответ: 144.

 

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

import itertools

alphabet = "ГЕ­РА­СИМ"

con = 'ГРСМ'

vol = 'ЕАИ'

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[i] in con and e[i + 1] in con) or (e[i] in vol and e[i + 1] in vol):

flag = False

if flag == True: count += 1

print(count)

 

При­ведём ре­ше­ние Ивана Свер­би­хи­на на языке Python.

b = 'ЕАИ'

a = 'ГРСМ'

c = 0

for i in a:

for j in b:

for n in a:

for m in b:

for l in a:

for k in b:

for g in a:

s =i+j+n+m+l+k+g

f = set(s)

if len(f) == len(s):

c += 1

print(c)

 

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

begin

'Г, Е, Р, А, С, И, М'.Remove(', ').Permutations(7)

.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 Фор­ма­ли­за­ция по­ня­тия ал­го­рит­ма