Форум » Выполнение и анализ алгоритмов для исполнителей » 12 задание, задача 260 » Ответить

12 задание, задача 260

Дондокова: 260) (Е. Джобс) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редак-тор может выполнять две команды, в обеих командах v и w обозначают цепочки символов. заменить (v, w) нашлось (v) Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если це-почки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Дана программа для Редактора: ПОКА нашлось (900) или нашлось(8000) или нашлось(70) заменить(70, 8) заменить(900, 70) заменить(8000, 900) КОНЕЦ ПОКА Известно, что на вход программы поступила строка из 71 символа. Определите минимальное четырехзначное число, которое может являться результатом работы исполнителя. Не пойму из каких символов состоит исходная строка? В ответе 1008.

Ответов - 18, стр: 1 2 All

Агаркова: Задание, в котором надо сначала обработать данные: чтобы вывести наименьшее четырехзначное число надо, чтобы оно начиналось с 100. Осталось подумать, можно ли из данных чисел получить 8? Путем преобразований получаем, что 8 дает следующее преобразование: 8000 - 900 - 70 - 8. т.о. в начальной строке долно быть 100, потом 8 и нули. Методом подбора нашла, что их должно быть 66. Но тогда знаков в начальной последовательности будет 70( 3+1+66), а надо 71. Восьмерка первая может быть получена еще из 70. Поэтому заменяем 8 на 70. Итак, начальная строка '10070' +'0'*66 программа простая на вывод обрабатываемой по данному алгоритму строки. Если бы не подошло, то следующее число, которое проверяла бы - это вывод 1070. Скажите, пожалуйста, можно ли заменить такие рассуждения на стандартный алгоритм, который позволит найти нужное число, не подбирая его. Если он есть, то напишите, пожалуйста код.

ТеплыхИБ: Попробовав ручками варианты от одной семерки до четырех девяток + оставшиеся нули, пришла к такому решению: x=9999 for i in range(9999,7+1,-1): s='' s=s+str(i)+(71-len(s))*'0' while '900' in s or '8000' in s or '70' in s: s=s.replace('70','8',1) s=s.replace('900','70',1) s=s.replace('8000','900',1) if len(s)==4 and int(s)<x: x=int(s) print(x)

Cnbgrf: [pre2] for i in range(1000, 2000): s1 = str(i) while '900' in s1 or '8' in s1 or '70' in s1: if '900' in s1: s1 = s1.replace('900', '8000', 1) if '70' in s1: s1 = s1.replace('70', '900', 1) if '8' in s1: s1 = s1.replace('8', '70', 1) if len(s1) == 71: print(i) break[/pre2]




полная версия страницы