Задание ОСН2016-1
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить(111, 27)
преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить(v, w) не меняет эту строку.
Б) нашлось(v)
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из "1" и 100 идущих подряд цифр "9"? В ответе запишите полученную строку.

В результате выполнения цикла программы 19 заменяется на 2, а 299 заменяется на 3999, и 3999 заменяется на 1. После одного такого цикла у нас пропадают 6 цифр “9”. Проделываем так несколько раз, пока у нас не останется цифра “1” и 4 цифры “9”. После этого 19999 становится 2999, а 299 становится 39. Ответ 39
| Python | Pascal | C++ |
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; }
|