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

Най­ди­те ко­ли­че­ство пя­ти­знач­ных вось­ме­рич­ных чисел, в ко­то­рых все цифры раз­лич­ны и ни­ка­кие две чет­ные или не­чет­ные не стоят рядом.

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

Ре­ше­ние.

За­ме­тим, что чётных и нечётных цифр в вось­ме­рич­ной си­сте­ме счис­ле­ния 4 и 4 со­от­вет­ствен­но. Найдём ко­ли­че­ство пя­ти­знач­ных чисел, на­чи­на­ю­щих­ся с нечётной цифры: 4 · 4 · 3 · 3 · 2  =  288. Найдём ко­ли­че­ство пя­ти­знач­ных чисел, на­чи­на­ю­щих­ся с чётной цифры (при этом учтем, что число не может на­чи­нать­ся с нуля): 3 · 4 · 3 · 3 · 2  =  216. Таким об­ра­зом, по­лу­ча­ем ответ: 288 + 216  =  504.

 

Ответ: 504.

 

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

import itertools

alphabet = "01234567"

ar = itertools.permutations(alphabet, 5) #Раз­ме­ще­ние

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[0] == "0") or (int(e[i]) % 2 == 0 and int(e[i+1]) % 2 == 0) or (int(e[i]) % 2 != 0 and int(e[i+1]) % 2 != 0):

flag = False

if flag:

count += 1

print(count)

 

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

from itertools import permutations

s = permutations('01234567', 5)

k = 0

for i in s:

if i[0] != '0':

if int(i[0])%2 != int(i[1])%2 and int(i[1])%2 != int(i[2])%2 and int(i[2])%2 != int(i[3])%2 and int(i[3])%2 != int(i[4])%2:

k += 1

print(k)

 

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

i = 0

for i1 in '1234567': # «0» не может быть пер­вой циф­рой

for i2 in '01234567':

for i3 in '01234567':

for i4 in '01234567':

for i5 in '01234567':

s = i1 + i2 + i3 + i4 + i5

if s.count(i1) == 1 and s.count(i2) == 1 and s.count(i3) == 1 and s.count(i4) == 1 and s.count(i5) == 1:

# про­ве­ря­ем усло­вие того, что буквы в слове не по­вто­ря­ют­ся (встре­ча­ют­ся по од­но­му разу)

s1 = ''

for j in s:

if j in '0246':

s1 += '0'

if j in '1357':

s1 += '1'

# стро­ка s1 со­сто­ит из «0» (чет­ные цифры) и «1» (не­чет­ные цифры), чтобы умень­шить число ва­ри­ан­тов про­вер­ки усло­вия что чет­ные и не­чет­ные цифры не стоят рядом    

if s1.count('11') == 0 and s1.count('00') == 0:

i += 1

print(i)

 

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

begin

'01234567'.Permutations(5) // 8-рич­ная 5-знач­ных

.Where(s->s[1] <> '0') // Пер­вой циф­рой не может быть 0

.Where(s->not s.IsMatch('[0246][0246]')) //не две чётные цифры рядом

.Where(s->not s.IsMatch('[1357][1357]')) //не две нечётные цифры рядом

.Count.Print;//504

end.

Источник: ЕГЭ по ин­фор­ма­ти­ке 03.07.2020. Ос­нов­ная волна
Раздел кодификатора ФИПИ: 1.6.1 Фор­ма­ли­за­ция по­ня­тия ал­го­рит­ма