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

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

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

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

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

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

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

ис­пол­ни­те­ля при этом не из­ме­ня­ет­ся.

 

Цикл

    ПОКА усло­вие

        по­сле­до­ва­тель­ность ко­манд

    КОНЕЦ ПОКА

вы­пол­ня­ет­ся, пока усло­вие ис­тин­но.

В кон­струк­ции

    ЕСЛИ усло­вие

        ТО ко­ман­да1

    КОНЕЦ ЕСЛИ

вы­пол­ня­ет­ся ко­ман­да1 (если усло­вие ис­тин­но).

В кон­струк­ции

    ЕСЛИ усло­вие

        ТО ко­ман­да1

        ИНАЧЕ ко­ман­да2

    КОНЕЦ ЕСЛИ

вы­пол­ня­ет­ся ко­ман­да1 (если усло­вие ис­тин­но) или ко­ман­да2 (если усло­вие ложно).

 

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

НА­ЧА­ЛО

    ПОКА на­шлось (111) или на­шлось (88888)

        ЕСЛИ на­шлось (111)

            ТО за­ме­нить (111, 88)

            ИНАЧЕ за­ме­нить (88888, 8)

        КОНЕЦ ЕСЛИ

    КОНЕЦ ПОКА

КОНЕЦ

 

На вход про­грам­ме по­да­на стро­ка из 100 еди­ниц. Какая стро­ка будет по­лу­че­на ис­пол­ни­те­лем после вы­пол­не­ния дан­но­го ал­го­рит­ма?

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

Ре­ше­ние.

За­ме­тим, что по при­о­ри­те­ту сна­ча­ла за­ме­ня­ет­ся 111 на 88, и толь­ко если в стро­ке нет 111, то 88888 за­ме­ня­ет­ся на 8. Зна­чит, 99 еди­ниц сна­ча­ла за­ме­нят­ся на 33 · 2 вось­мер­ки. По­лу­чим стро­ку, вида 888…8881. Опе­ра­ция за­ме­ны 88888 на 8 уда­ля­ет из стро­ки 4 вось­мер­ки. Имеем 66  =  16 · 4 + 2. Сле­до­ва­тель­но, после пре­об­ра­зо­ва­ния по­лу­чим стро­ку 881.

 

При­ведём про­грамм­ное ре­ше­ние.

 

Пас­каль

var s: string;

begin

    s := '1'*100;

    while ('111' in s) or ('88888' in s) do

        if '111' in s then

            s := s.Replace('111', '88', 1)

        else

            s := s.Replace('88888', '8', 1);

    writeln(s);

end.

Python

s = '1'*100

while '111' in s or '88888' in s:

    if '111' in s:

        s = s.replace('111', '88', 1)

    else:

        s = s.replace('88888', '8', 1)

print(s)

С++

#include <iostream>

#include <string>

using namespace std;

int main(){

    string s = string(100, '1');

    while(s.find("111") != string::npos || s.find("88888") != string::npos)

        if(s.find("111") != string::npos)

            s.replace(s.find("111"), 3, "88");

        else

            s.replace(s.find("88888"), 5, "8");

    cout << s;

}

 

Ответ: 881.


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

Источник: ЕГЭ по ин­фор­ма­ти­ке 24.06.2021. Ос­нов­ная волна
Раздел кодификатора ФИПИ: 1.6.2 Вы­чис­ли­мость. Эк­ви­ва­лент­ность ал­го­рит­ми­че­ских мо­де­лей