Сколько существует восьмеричных пятизначных чисел, не содержащих в своей записи
Приведём аналитическое решение Юрия Красильникова.
Если первая цифра числа четная, то имеется 3 способа её выбрать (цифра 2, 4 или 6). Вторая цифра может быть одной из цифр 3, 5 или 7 - т. е. три варианта. Для третьей цифры имеется три варианта выбора (цифру на первом месте мы выбирать не можем, но можем выбрать цифру 0). Для четвертой цифры - два варианта, для пятой - также два. Итого 3*3*3*2*2=108 чисел.
Если первая цифра нечётная, то имеется три способа выбора (3, 5 или 7). Вторую цифру можно выбрать четырьмя способами (все чётные цифры). Третью цифру - двумя способами, четвёртую - тремя и пятую - одним. Итого 3*4*2*3*1=72 варианта.
Всего имеется 108+72=180 различных чисел.
Приведём решение на языке Python.
s = '01234567'
count = 0
for a in '1234567':
for b in s:
for c in s:
for d in s:
for e in s:
r = a + b + c + d + e
if r.count('1') < 1 and r.count('0') <= 1 and r.count('2') <= 1 and \
r.count('3') <= 1 and r.count('4') <= 1 and r.count('5') <= 1 and \
r.count('6') <= 1 and r.count('7') <= 1 and \
r.count('00') == r.count('22') == r.count('44') == r.count('66') == 0 and \
r.count('02') == r.count('20') == r.count('04') == r.count('40') == 0 and \
r.count('06') == r.count('60') == r.count('24') == r.count('42') == 0 and \
r.count('46') == r.count('64') == r.count('26') == r.count('62') == 0 and \
r.count('33') == r.count('55') == r.count('77') == r.count('35') == 0 and \
r.count('53') == r.count('37') == r.count('73') == r.count('57') == 0 and \
r.count('75') == 0:
count += 1
print(count)
Ответ: 180.
Приведём решение Юрия Красильникова на языке Python.
from itertools import permutations
def good(s):
return s[0]!='0' and all([(s[i] in '357')!=(s[i+1] in '357') for i in range(len(s)-1)])
print(len([p for p in permutations('0234567',5) if good(p)]))
Приведём решение Виктории Зиберовы на языке Python.
count = 0
for num in range(4096,32768):
r=oct(num)[2:]
if r.count('1') == 0:
for c in range (len(r)-1):
if (int(r[c])%2)==(int(r[c+1])%2) or r.count(r[c]) > 1:
break
if c == len(r)-2:
count += 1
print(count)
Приведём решение Софии Разаевой на языке Python.
from itertools import *
k = 0
c1 = '0246'
c2 = '1357'
for p in permutations('0234567', 5):
s = ''.join(p)
for i in range(len(s)-1):
if s[i] in c1 and s[i+1] in c1 or s[i] in c2 and s[i+1] in c2:
break
else:
if s[0] != '0':
k += 1
print(k)
Приведём решение Валерия Протасова на языке Python.
from itertools import*
k=0
for x in permutations('0234567',r = 5):
if x[0]!='0':
s=''.join(x)
s = s.replace('5','3').replace('7','3')
s = s.replace('2','0').replace('4','0').replace('6','0')
if '33' not in s and '00' not in s:
k+=1
print(k)
Приведём решение Сергея Донец на языке PascalABC.NET.
begin
'01234567'.Permutations(5) // 8-ричная 5-значных
.Where(s->s[1] <> '0')// Первой цифрой не может быть 0
.Where(s->'1' not in s)
.Where(s->not s.IsMatch('[0246][0246]'))
.Where(s->not s.IsMatch('[1357][1357]'))
.Count.Print;
end.

