Определите количество четырехзначных чисел, записанных в десятичной системе счисления, в записи которых все цифры различны и никакие две чётные и две нечётные цифры не стоят рядом.
Приведём аналитическое решение Юрия Красильникова.
Поскольку нечетные и четные цифры не могут стоять рядом, то число может быть либо вида ЧНЧН, либо НЧНЧ
1. Если первая цифра чётная, то у нас четыре кандидата (число не может начинаться с нуля). На третьем месте может стоять любая из оставшихся четырёх цифр. На втором месте — любая нечетная цифра из пяти, на четвёртом — любая из оставшихся четырёх. Всего
2. Если первая цифра нечетная, то это любая цифра из пяти. На третьем месте любая цифра из оставшихся четырёх. Аналогично на втором месте любая из пяти чётных цифр, на четвёртом — любая из оставшихся четырёх. Всего
Итого
Приведём решение на языке Python.
import itertools
alphabet = "0123456789"
cet = "02468"
necet = "13579"
ar = itertools.permutations(alphabet, 4) #Размещение
arl = []
for e in ar:
arl.append(e)
count = 0
for e in arl:
flag = True
for i in range(len(e)-1):
if (e[i] in cet and e[i+1] in cet) or (e[i] in necet and e[i+1] in necet) or e[0] == '0':
flag = False
if flag:
count += 1
print(count)
Ответ: 720.
Приведём решение Михаила Глинского на языке Python.
k=0
for x in range(1000,10000):
s=str(x)
sp={s[0],s[1],s[2],s[3]}
a1='13579'
a0='02468'
fl=True
for x in range(3):
if s[x] in a1 and s[x+1] in a1 or s[x] in a0 and s[x+1] in a0:
fl=False
if len(sp)==4 and fl==True: k+=1
print(k)
Приведём решение Ильи Андрианова на языке Python.
from itertools import permutations
count = 0
for s in permutations('0123456789', 4):
num = ''.join(s)
if num[0] != '0':
num = num.replace('0', '2').replace('4', '2').replace('6', '2').replace('8', '2')
num = num.replace('3', '1').replace('5', '1').replace('7', '1').replace('9', '1')
if '11' not in num and '22' not in num:
count += 1
print(count)
Приведём решение Юрия Красильникова на языке Python.
from itertools import permutations
def good(p):
return p[0] != '0' and all([int(p[i])%2!=int(p[i+1])%2 for i in range(len(p)-1)])
print(len([p for p in permutations('0123456789',4) if good(p)]))
Приведём решение Арслана Мухамедова (Казань) на языке Python.
from itertools import *
x = permutations('0123456789', 4)
count = 0
for i in x:
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 i[0] != '0':
count += 1
print(count)
Приведём решение Александра Козлова на языке Python.
k = 0
for a in '2468':
for b in '13579':
for c in '02468':
for d in '13579':
s = a+b+c+d
if a != c and b != d:
k += 1
for a in '13579':
for b in '02468':
for c in '13579':
for d in '02468':
s = a+b+c+d
if a != c and b != d:
k += 1
print(k)
Приведём решение Егора Чернецова на языке Python.
print(sum(1 for n in range(1000,10000) if len(set(s:=str(n)))==4 and all(int(s[i])%2 != int(s[i+1])%2 for i in range(3))))
Приведём решение Сергея Донец на языке PascalABC.NET.
begin
'0123456789'.Permutations(4)//10-чная 4-значных
.Where(s->s[1] <> '0')// Первой цифрой не может быть 0
.Where(s->not s.IsMatch('[02468][02468]'))//никакие две чётные цифры не стоят рядом
.Where(s->not s.IsMatch('[13579][13579]'))//никакие две нечётные цифры не стоят рядом
.Count.Print;
end.

