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

Ал­го­ритм по­лу­ча­ет на вход на­ту­раль­ное число N и стро­ит по нему новое число R сле­ду­ю­щим об­ра­зом.

1.  Стро­ит­ся дво­ич­ная за­пись числа N.

2.  Если сумма цифр де­ся­тич­ной за­пи­си за­дан­но­го числа нечётна, то в конец дво­ич­ной за­пи­си до­пи­сы­ва­ет­ся 1, если чётна  — 0.

3−4.  Пункт 2 по­вто­ря­ет­ся для вновь по­лу­чен­ных чисел ещё два раза.

5.  Ре­зуль­та­том ра­бо­ты ал­го­рит­ма ста­но­вит­ся де­ся­тич­ная за­пись по­лу­чен­но­го числа R.

 

При­мер. Дано число N  =  17. Ал­го­ритм ра­бо­та­ет сле­ду­ю­щим об­ра­зом:

1.  Стро­им дво­ич­ную за­пись: 1710  =  100012.

2.  Сумма цифр числа 17 чётная, до­пи­сы­ва­ем к дво­ич­ной за­пи­си 0, по­лу­ча­ем 1000102  =  3410.

3.  Сумма цифр числа 34 нечётная, до­пи­сы­ва­ем к дво­ич­ной за­пи­си 1, по­лу­ча­ем 10001012  =  6910.

4.  Сумма цифр числа 69 нечётная, до­пи­сы­ва­ем к дво­ич­ной за­пи­си 1, по­лу­ча­ем 100010112  =  13910.

5.  Ре­зуль­тат ра­бо­ты ал­го­рит­ма R  =  139.

 

Опре­де­ли­те ко­ли­че­ство при­над­ле­жа­щих от­рез­ку [123 456 789; 1 987 654 321] чисел, ко­то­рые могут по­лу­чить­ся в ре­зуль­та­те ра­бо­ты этого ал­го­рит­ма.

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

Ре­ше­ние.

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

def summ(n):

sumi = 0

while n > 0:

sumi += n % 10

n = n // 10

return sumi

o1 = 0

o2 = 0

q1 = bin(123456789)[2:]

q2 = int(q1[:len(q1)-3], 2)

 

for n in range(q2 - 10, q2 + 10):

s = bin(n)[2:]

for i in range(3):

if summ(int(s, 2)) % 2 == 0:

s += '0'

else:

s += '1'

r = int(s, 2)

if 123456789 <= r and r <= 1987654321:

o1 = n

break

k1 = bin(1987654321)[2:]

k2 = int(k1[:len(k1) - 3], 2)

for n in range(k2 - 10, k2 + 10):

s = bin(n)[2:]

for i in range(3):

if summ(int(s, 2)) % 2 == 0:

s += '0'

else:

s += '1'

r = int(s, 2)

if 123456789 <= r and r <= 1987654321:

o2 = n

print(o2 - o1 + 1)

 

Ответ: 233 024 691.

 

При­ведём ре­ше­ние Дмит­рия Гну­то­ва на языке Python.

def hi(n):

t = str(n)

nechet = t.count('1') + t.count('3') + t.count('5') + t.count('7') + t.count('9')

if nechet % 2 == 1:

n = n * 2 + 1

else:

n = n * 2

return n

a = 123456789//8

for minch in range (a-1, a+2):

if hi(hi(hi(minch))) >= 123456789:

break

b = 1987654321//8

for ch in range (b -1, b + 2):

if hi(hi(hi(ch))) <= 1987654321:

maxch = ch

print(maxch, minch, maxch - minch +1)

 

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

def f(n):

for i in range(3):

n = 2*n + sum(map(int,str(n)))%2

return n

 

a,b = 123456789,1987654321

n = a // 8-5

m = b// 8-5

while f(n) < a: n += 1

while f(m) <= b: m += 1

print(m-n)


Аналоги к заданию № 56505: 56533 Все