Задание 12 - Информатика

← Вернуться к списку заданий

Условие задачи

Задание ОСН2016-1

 

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

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

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды

заменить(111, 27)

преобразует строку 05111150 в строку 0527150.

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

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

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

 

Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из "1" и 100 идущих подряд цифр "9"? В ответе запишите полученную строку.

Ответ: 39

Комментарий

В результате выполнения цикла программы 19 заменяется на 2, а 299 заменяется на 3999, и 3999 заменяется на 1. После одного такого цикла у нас пропадают 6 цифр “9”. Проделываем так несколько раз, пока у нас не останется цифра “1” и 4 цифры “9”. После этого 19999 становится 2999, а 299 становится 39. Ответ 39

 

PythonPascalC++

s = '1' + '9' * 100

while '19' in s or '299' in s or ‘3999’ in s:

    if '19' in s:

        s = s.replace('19', '2', 1)

    if '2' in s:

        s = s.replace('299', '3', 1)

    if '3' in s:

        s = s.replace('3999', '1', 1)

print(s)











 

begin

  var s:='1' + '9' * 100;

  while ('19' in s) or ('299' in s) or ('3999' in s) do

  begin

    if '19' in s then

      s:=s.Replace('19','2',1);

    if '299' in s then

      s:=s.Replace('299','3',1);

    if '3999' in s then

      s:=s.Replace('3999','1',1);

  end;

  writeln(s);

end.








 

#include <bits/stdc++.h>

using namespace std;
 

int main(){

    string s, s1, s2, s3;

    int n;

    s1 = "2";

    s2 = "3";

    s3 = "1";

    s = "1";

    for (int i = 0; i < 100; i++){

        s += "9";

    }

    while (s.find("19") != std::string::npos || s.find("299") != std::string::npos || s.find("3999") != std::string::npos){

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

            s = s.replace(s.find("19"), 2, s1);

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

            s = s.replace(s.find("299"), 3, s2);

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

            s = s.replace(s.find("3999"), 4, s3);

    }

    cout << s << endl;

}





 

Похожие задания

Задание 12 Задание 12 Задание 12 Задание 12 Задание 12