Найдите количество пятизначных восьмеричных чисел, в которых все цифры различны и никакие две четные или нечетные не стоят рядом.
Заметим, что чётных и нечётных цифр в восьмеричной системе счисления
Ответ: 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.

