Форум » Циклы и ветвления » Задание 14, вариант 8 (№ 289) » Ответить

Задание 14, вариант 8 (№ 289)

Геворг: Программа должна заменять участки строки, при этом в каждом проходе цикла сначала идет поиск и замена 555 на 8, потом 888 на 5. Судя по ответу - идет сначала общий поиск, а после этого замена - но это ведь не логично. Например, строку 555888 по той же логике должно заменить на 85 ((555)(888)-->85), на самом же деле более логично, что после замены 555-->8 и получившейся строке 8888 будет замена первых трех восьмерок: (888)8-->58

Ответов - 2

Медко: Конечно не логично. А программа-то правильно работает. У Вас два внутренних цикла while, выполняющихся в определенном порядке, и внешний цикл while. Сначала Вы проверяете, есть ли у Вас цепочки 888 или 555? Если есть, то проверяете, есть ли цепочки из трех пятерок? Если да - начинаете заменять 3 пятерки на 1 восьмерку и меняете до тех пор, пока у Вас этих троек из пятерок не останется, т.е. получаете 13 восьмерок (первый внутренний цикл закончился) Далее идет второй внутренний цикл while. Вы проверяете, есть ли у Вас цепочки из трех восьмерок? Если есть - вы начинаете заменять 3 восьмерки на 1 пятерку и меняете до тех пор, пока у Вас этих троек из восьмерок не останется, т.е. получаете 55558. Далее Вы возвращаетесь к условию внешнего цикла. Проверяете. Затем Вы переходите к условию первого внутреннего цикла. Проверяете. Заменяете 3 пятерки на 1 восьмерку и получаете ответ 858.

Геворг: Спасибо за объяснение) Свою ошибку понял, а главная проблема - невнимательность(( Просто до этого из данного блока мне попадались одни и те же задачи (сейчас поискал, это, например, № 296, 300), там используется условие внутри while. А в этой задаче я почему-то просмотрел изменения) Извините за беспокойство и еще раз спасибо!))



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