К содержанию

Задание 5 · Формальное исполнение алгоритма

Практика и итог

Вся тема на одной странице: как решилась задача темы, главное из подтем, порядок решения и частые ошибки.

Одна задача — вся тема

Задача темы — наименьшее N, для которого R больше 150, — прошла через подтемы, и каждая добавляла к решению новый шаг. Пролистай черновик: точками отмечены строки, которых не было после предыдущей подтемы.

  1. Подтема 1, «Число и его запись»: число и запись — bin и int. Точками отмечены новые строки.
  2. Подтема 2, «Дописывание цифр»: две цифры справа — R растёт вчетверо.
  3. Подтема 4, «Решение перебором»: первое N с R > 150.
  4. Подтема 5, «Решение от результата»: перебор R: хвост и остаток. Ответ задачи темы — 38.

Задача не менялась — менялся способ: запись числа, дописывание, программа перебором и решение без программы, от результата. Срезы и замены из подтемы 3 в задаче темы не понадобились — они нужны, когда алгоритм переставляет или заменяет цифры.

Карта темы

Каждая подтема дала несколько приёмов, и любое решение собирается из них. Сверху — путь от числа к ответу, ниже — по блоку на подтему. Заголовок блока ведёт на подтему.

  1. ЗаписьN → строка цифр в нужной системе
  2. Действиякаждая команда — одна строка кода
  3. Ответперебором или от результата

1Число и его запись

  • bin(n)[2:]двоичная запись без приставки 0b
  • int(s, q)запись в системе q → число
  • to_base(n, q)запись в троичной и других системах

2Дописывание цифр

  • s + '01'дописать справа: в двоичной R = 4N + 1
  • '10' + sдописать слева: старшие разряды
  • блок 01две цифры, а не одна

3Срезы, замены и сумма цифр

  • s[-2:]две последние цифры
  • s[::-1]переворот
  • s.count('1')сумма двоичных цифр
  • обмен 0 и 1через третий символ, не двумя replace

4Решение перебором

  • наименьшее Nпервое подходящее, затем break
  • наименьшее Rперебрать всё, хранить лучшие R и N
  • границаR ≥ N, если цифры только дописывают

5Решение от результата

  • хвост Rсовпадает с дописанным блоком
  • остаток слеваэто запись N — проверь её свойство
Карта темы: путь к ответу сверху и главное из каждой подтемы. Номер блока — номер подтемы.

Как решать

Любое задание 5 решается одним порядком из пяти шагов. Каждому шагу ты уже учился — под ним номера подтем:

Главный шаг — пример из условия: программа должна дать на нём тот же результат. Если не сошлось, исправляют действие, а не подбирают диапазон перебора.

Порог из условия переводят буквально: «больше T» — это r > T, «не меньше T» — r >= T, «не превышает T» — r <= T.

Частые ошибки

Восемь ошибок встречаются чаще других, и каждую ловит один вопрос к себе. Выбери ошибку — увидишь, как её исправить, и вопрос, который её ловит:

str вместо перевода
str(n) → bin(n)[2:]. Спроси себя: в какой системе нужна запись?подтема 1
чётность не того
проверили чётность N → проверяют то, что названо: например, сумму цифр. Спроси себя: какую величину проверяет условие?подтема 2
старая сумма
второй шаг считает по старой записи → каждый шаг — по текущей записи. Спроси себя: к какой версии записи относится шаг?подтема 2
два replace
s.replace('0','1').replace('1','0') → обмен через третий символ. Спроси себя: не заменились ли новые символы повторно?подтема 3
маленький диапазон
range(1, 100) без обоснования → граница из свойств алгоритма. Спроси себя: почему ответ точно не больше границы?подтема 4
первый R
наименьшее R — первое найденное → перебрать всё и хранить лучшее. Спроси себя: растёт ли R вместе с N?подтема 4
> и >=
r >= 150 → r > 150. Спроси себя: «больше» или «не меньше»?подтема 4
r вместо n
print(r) → print(n). Спроси себя: что спрашивает последняя строка условия?подтема 5

Итог

Тема пройдена: задача темы решена и программой, и от результата — ответ 38. Вот что взять с собой.

  • ПорядокЗапись, действия, пример, поиск, ответ.
  • ЗаписьАлгоритм работает с цифрами, спрашивают о числах.
  • ДействияКаждая команда — строка кода по текущей записи.
  • ПоискПеребор с обоснованной границей или от результата.
  • Задача темыN = 38: 100110 + 10 = 10011010, R = 154.

Проверьте себя

Ответь сначала сам, потом открой ответ.

Вопрос 1

К двоичной записи N справа дописали 01. Как R выражается через N?

ОтветСкрыть ответ
Ответ

R = 4N + 1: две цифры справа сдвигают запись на два разряда, а 01 добавляет 1.

Вопрос 2

Почему в задаче темы перебор можно остановить на первом N с R больше 150?

ОтветСкрыть ответ
Ответ

Цифры только дописываются, поэтому больший N даёт больший R: первое подходящее N и есть наименьшее.

Вопрос 3

R = 153, запись 10011001. Мог ли алгоритм задачи темы его выдать?

ОтветСкрыть ответ
Ответ

Нет: хвост 01 дописывают к нечётным, а слева остаётся 100110 = 38 — чётное.

Вопрос 4

Спрашивают наименьшее R, а алгоритм иногда уменьшает число. Можно ли остановиться на первом найденном?

ОтветСкрыть ответ
Ответ

Нет: R не растёт вместе с N. Нужно перебрать весь диапазон и хранить наименьшее R.

Практика

Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.

Наибольшее R не больше 150

На вход алгоритма подаётся натуральное число N. Строится двоичная запись N. Если N чётное, слева к ней дописывается 10; если нечётное, слева дописывается 1, а справа — 11. Полученная запись — двоичная запись числа R. Укажи наибольшее R, не превышающее 150.

Введите число.

Дважды дописать остаток суммы на 3

На вход алгоритма подаётся натуральное число N. Строится троичная запись N. Затем два раза подряд к текущей записи справа дописывается остаток от деления суммы её цифр на 3. Полученная запись — троичная запись числа R. Укажи наименьшее N, для которого R больше 400.

Введите число.

Переворот и единица справа

На вход алгоритма подаётся натуральное число N. Двоичная запись N переворачивается (читается справа налево), затем справа дописывается 1. Полученная запись — двоичная запись числа R. Укажи наименьшее N, для которого R больше 1000.

Введите число.

Восьмеричный алгоритм

На вход алгоритма подаётся натуральное число N. Строится восьмеричная запись N. Если N чётное, справа к ней дописывается её первая цифра; иначе остаток от деления N на 5 записывается в восьмеричной системе и дописывается слева. Полученная запись — восьмеричная запись числа R. Укажи такое N, при котором R — наименьшее среди чисел, больших 600.

Введите число.

Без нулей и задом наперёд

На вход алгоритма подаётся натуральное число N ≥ 10. Из десятичной записи N удаляются все нули, оставшиеся цифры записываются в обратном порядке, и получившаяся запись — десятичная запись числа R. Сколько различных значений R получается при N от 10 до 999?

Введите число.