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

Ис­пол­ни­тель Ре­дак­тор по­лу­ча­ет на вход стро­ку цифр и пре­об­ра­зу­ет её. Ре­дак­тор может вы­пол­нять две ко­ман­ды, в обеих ко­ман­дах v и w обо­зна­ча­ют це­поч­ки цифр.

А)  за­ме­нить (v, w).

Эта ко­ман­да за­ме­ня­ет в стро­ке пер­вое слева вхож­де­ние це­поч­ки v на це­поч­ку w. На­при­мер, вы­пол­не­ние ко­ман­ды за­ме­нить (111, 27) пре­об­ра­зу­ет стро­ку 05111150 в стро­ку 0527150.

Если в стро­ке нет вхож­де­ний це­поч­ки v, то вы­пол­не­ние ко­ман­ды за­ме­нить (v, w) не ме­ня­ет эту стро­ку.

Б)  на­шлось (v).

Эта ко­ман­да про­ве­ря­ет, встре­ча­ет­ся ли це­поч­ка v в стро­ке ис­пол­ни­те­ля Ре­дак­тор. Если она встре­ча­ет­ся, то ко­ман­да воз­вра­ща­ет ло­ги­че­ское зна­че­ние «ис­ти­на», в про­тив­ном слу­чае воз­вра­ща­ет зна­че­ние «ложь». Стро­ка ис­пол­ни­те­ля при этом не из­ме­ня­ет­ся.

 

Дана про­грам­ма для Ре­дак­то­ра:

НА­ЧА­ЛО

                ПОКА НЕ на­шлось (00)

                        за­ме­нить (033, 21120)

                        за­ме­нить (034, 22120)

                        за­ме­нить (04, 220)

                        за­ме­нить (030, 100)

                КОНЕЦ ПОКА

КОНЕЦ

 

Из­вест­но, что в ис­ход­ной стро­ке A было ровно два нуля  — на пер­вом и на по­след­нем месте, а после вы­пол­не­ния дан­ной про­грам­мы по­лу­чи­лась стро­ка B, со­дер­жа­щая 65 цифр, и сумма цифр стро­ки B ока­за­лась про­стым чис­лом. Какое наи­мень­шее ко­ли­че­ство троек могло быть в стро­ке A?

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

Ре­ше­ние.

При­ведём ана­ли­ти­че­ское ре­ше­ние.

Про­ве­рим, как ме­ня­ет­ся после пре­об­ра­зо­ва­ние сумма чисел и их ко­ли­че­ство:

033 -> 21120 сумма чисел 6 -> 6 ко­ли­че­ство чисел (без учета 0) 2 -> 4

034 -> 22120 сумма чисел 7 -> 7 ко­ли­че­ство чисел (без учета 0) 2 -> 4

04 -> 220 сумма чисел 4 -> 4 ко­ли­че­ство чисел (без учета 0) 1 -> 2

030 -> 100 стро­ка, после ко­то­рой цикл за­вер­шить­ся.

 

Можно за­ме­тить, что в из­на­чаль­ной стро­ке точно была одна 3, так как цикл за­вер­шить­ся толь­ко по по­след­ней стро­ке. Также сумма цифр на входе будет от­ли­чать­ся от суммы цифр на вы­хо­де на 2, так как одну 3 ме­ня­ем на одну 1. Ко­ли­че­ство цифр на входе будет мень­ше ко­ли­че­ства цифр на вы­хо­де в два раза. Без учета двух нулей и 3 (ко­то­рую за­ме­нят на 1): на вы­хо­де 65 цифр − два 0 − одна 1  =  62 цифры, на входе в два раза мень­ше  — 31 цифра + два 0 + одна 3. На­пи­шем про­грам­му, ко­то­рая счи­та­ет ми­ни­маль­ную вход­ную сумму, ко­то­рое яв­ля­ет­ся про­стым чис­лом, и вер­нем ко­ли­че­ство троек.

 

Код на языке Python.

def Div(n):

for i in range(2, int(n**0.5)+1):

if n % i == 0:

return False

return True

 

for i in range(0,31 + 1):

summa = i*3 + (31 - i)*4 + 1

if Div(summa):

print(i + 1)

break

 

В ре­зуль­та­те ра­бо­ты про­грам­мы по­лу­ча­ем ответ  — 13.

 

Ответ: 13.

 

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

from random import shuffle

a=[]

for i in range (0,20):

for j in range (0,20):

for k in range (0,1000):

s=list('3'*i+'4'*j)

shuffle(s)

s='0'+''.join(s)+'30'

while not '00' in s:

s=s.replace('033','21120',1)

s = s.replace('034', '22120', 1)

s = s.replace('04', '220', 1)

s = s.replace('030', '100', 1)

if len(s)==65:

k=s.count('1')+s.count('2')*2

f=0

for l in range (2,k):

if k%l==0:

f=1

break

if f==0:

a.append(i+1)

print(min(a))


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