Тема 5. Алгоритмы – анализ простейших алгоритмов

5.01 Запись числа в двоичной системе счисления

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела алгоритмы – анализ простейших алгоритмов
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 41#49355Максимум баллов за задание: 1

На вход алгоритма подаётся натуральное число N  . Алгоритм строит по нему новое число R  следующим образом.

1) Строится двоичная запись числа N  .

2) К этой записи дописывается справа бит чётности: 0, если в двоичном коде числа N  было чётное число единиц, и 1, если нечётное.

3) К полученному результату дописывается ещё один бит чётности.

Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N  ) является двоичной записью искомого числа R  . Укажите минимальное число R  , большее 130, которое может быть получено в результате работы этого алгоритма. В ответе это число запишите в десятичной системе.

Показать ответ и решение

Решение программой
В условии задачи описан алгоритм, для поиска подходящего числа R необходимо «перевести» этот алгоритм с естественного языка на язык программирования Python. Сначала переводим число N в двоичную строку с помощью функции bin. Затем вычисляем количество единиц с помощью метода count. Если это количество чётное, дописываем справа 0, используя конкатенацию строк (оператор +). Если нечётное, дописываем 1. Повторяем те же действия для изменённой двоичной записи, переводим результат в десятичную систему счисления, получаем R.

Далее организуем перебор чисел N в цикле for. Для каждого полученного значения R проверяем, превышает ли оно 130 и является ли наименьшим среди полученных. Если условие выполняется, обновляем наименьшее значение R. После завершения цикла выводим минимальное R, которое > 130.

mn = 10 ** 10  # Инициализация переменной для хранения минимального R > 130

for i in range(1, 10000):  # Перебираем числа N от 1 до 9999 включительно
    s = bin(i)[2:]  # Перевод в двоичную систему

    # Вычисляем бит чётности
    if s.count("1") % 2 == 0:
        # Если количество единиц чётно, дописываем 0, иначе - 1
        s += "0"
    else:
        s += "1"

    # Повторяем предыдущий шаг, но уже для изменённой записи
    if s.count("1") % 2 == 0:
        s += "0"
    else:
        s += "1"

    r = int(s, 2)  # Переводим в десятичную систему, получаем R

    # Проверяем, что r > 130, то есть подходит по условию, и меньше текущего минимального
    if r > 130 and r < mn:
        mn = r
print(mn)

Ответ: 132

Ошибка.
Попробуйте повторить позже

Задача 42#51464Максимум баллов за задание: 1

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число следующим образом.
1. Строится двоичная запись числа N.
2. К этой записи дописываются справа ещё два разряда по следующему правилу: если N чётное, в конец числа (справа) дописываются два нуля, в противном случае справа дописываются две единицы.

Например, двоичная запись 1001 числа 9 будет преобразована в 100111. Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью числа – результата работы данного алгоритма.

Укажите минимальное число N, для которого результат работы алгоритма будет больше 213. В ответе это число запишите в десятичной системе счисления.

Показать ответ и решение

Решение программой
В условии задачи описан алгоритм, для поиска подходящего числа N необходимо «перевести» этот алгоритм с естественного языка на язык программирования Python. Сначала переводим число N в двоичную строку с помощью функции bin, затем вычисляем чётность N с помощью взятия остатка от деления на 2 (% 2). Если N – чётное, дописываем 00, используя конкатенацию строк (оператор +). Иначе – дописываем 11. Переводим результат в десятичную систему счисления, получаем R.

Далее организуем перебор чисел N в цикле for. Для каждого полученного значения R проверяем, превышает ли оно 213. Если условие выполняется, выводим N и завершаем цикл, ведь нас интересует наименьшее N, а следующие значения N будут больше, так как цикл перебирает их по возрастанию.

for n in range(1, 10000):  # Перебираем числа N от 1 до 9999 включительно
    s = bin(n)[2:]  # Перевод в двоичную систему
    if n % 2 == 0:
        # Если n - чётно, дописываем 00, иначе 11
        s += "00"
    else:
        s += "11"

    if int(s, 2) > 213:  # Получаем R
        # Первое выведенное N будет минимальным
        print(n)  # Выводим N
        break  # Завершаем цикл

Ответ: 53

Ошибка.
Попробуйте повторить позже

Задача 43#51465Максимум баллов за задание: 1

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. К этой записи дописываются справа ещё два разряда по следующему правилу:

а) складываются все цифры двоичной записи числа N, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;

б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы её цифр на 2. Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью результирующего числа R.

Укажите такое наименьшее число N, для которого результат работы данного алгоритма больше числа 91. В ответе это число запишите в десятичной системе счисления.

Показать ответ и решение

Решение программой

В условии задачи описан алгоритм, для поиска подходящего числа N необходимо «перевести» этот алгоритм с естественного языка на язык программирования Python. Первым делом переводим число N в двоичную строку с помощью функции bin. Далее заметим, что сумма цифр двоичной записи совпадает с количеством единиц в ней, так как цифр 2, 3 и более нет. Используя метод count, вычисляем сумму цифр (количество единиц), находим остаток от деления на 2 (% 2), дописываем в конец записи с помощью сложения строк. Повторяем то же самое для обновлённой записи. Осталось перевести результат в десятичную систему счисления, получив R.

Далее организуем перебор чисел N в цикле for. Для каждого полученного значения R проверяем, превышает ли оно 91. Если условие выполняется, выводим N и завершаем цикл, ведь нас интересует наименьшее N, а следующие значения N будут больше, так как цикл перебирает их по возрастанию.

for n in range(1000):  # Перебираем числа N от 0 до 999 включительно
    s = bin(n)[2:]  # Перевод в двоичную систему

    # Считаем количество единиц с помощью count,
    # находим остаток (% 2), дописываем в конец s
    s = s + str(s.count("1") % 2)
    s = s + str(s.count("1") % 2)  # Повторяем для обновлённой записи

    r = int(s, 2)  # Переводим в десятичную систему

    if r > 91:  # Проверяем, что полученное число больше 91
        print(n)  # Первое выведенное N будет минимальным
        break  # Завершаем цикл

Ответ: 23

Ошибка.
Попробуйте повторить позже

Задача 44#51466Максимум баллов за задание: 1

Автомат обрабатывает натуральное число N по следующему алгоритму:
1. Строится двоичная запись числа N.
2. Запись «переворачивается», то есть читается справа налево. Если при этом появляются ведущие нули, они отбрасываются.
3. Полученное число переводится в десятичную запись и выводится на экран.

Пример. Дано число N = 58. Алгоритм работает следующим образом. 1. Двоичная запись числа N: 111010. 2. Запись справа налево: 10111 (ведущий ноль отброшен). 3. На экран выводится десятичное значение полученного числа 23.

Какое наибольшее число, не превышающее 200, после обработки автоматом даёт результат 37?

Показать ответ и решение

Решение программой
В условии задачи описан алгоритм, для поиска подходящего числа N необходимо «перевести» этот алгоритм с естественного языка на язык программирования Python. Первым делом переводим число N в двоичную строку с помощью функции bin. Далее «перевернём» запись, используя срез с шагом -1. Важно отметить, что необязательно отбрасывать ведущие нули, ведь затем сразу используем функцию int. Осталось перевести результат в десятичную систему счисления, получив R.

Далее организуем перебор чисел N (до 200) в цикле for. Для каждого полученного значения R проверяем, равняется ли оно 37. Если условие выполняется, выводим N. В ответ запишем наибольшее выведенное число.

for n in range(201):  # Перебираем числа N от 1 до 200 включительно
    b = bin(n)[2:]  # Перевод в двоичную систему
    b = b[::-1]  # Переворачиваем запись
    if int(b, 2) == 37:  # Проверяем, что полученное число равно 37
        print(n)  # Выводим число до обработки

Ответ: 164

Ошибка.
Попробуйте повторить позже

Задача 45#53425Максимум баллов за задание: 1

Автомат обрабатывает натуральное число N по следующему алгоритму:

1. Строится двоичная запись числа N.

2. Складываются все цифры полученной двоичной записи. В конец записи (справа) дописывается остаток от деления суммы на 2.

3. Предыдущий пункт повторяется для записи с добавленной цифрой.

4. Результат переводится в десятичную систему и выводится на экран.

Пример. Дано число N = 17. Алгоритм работает следующим образом:

1. Двоичная запись числа N: 10001.

2. Сумма цифр двоичной записи 2, остаток от деления на 2 равен 0, новая запись 100010.

3. Сумма цифр полученной записи 2, остаток от деления на 2 равен 0, новая запись 1000100.

4. На экран выводится число 68.

Какое наименьшее число, большее 200, может появиться на экране в результате работы автомата?

Показать ответ и решение

Решение программой
В условии задачи описан алгоритм, для поиска подходящего числа R необходимо «перевести» этот алгоритм с естественного языка на язык программирования Python. Первым делом переводим число N в двоичную строку с помощью функции bin. Далее заметим, что сумма цифр двоичной записи совпадает с количеством единиц в ней, так как цифр 2, 3 и более нет. Используя метод count, вычисляем сумму цифр (количество единиц), находим остаток от деления на 2 (% 2), дописываем в конец записи с помощью сложения строк. Повторяем то же самое для обновлённой записи. Осталось перевести результат в десятичную систему счисления, получив R.

Далее организуем перебор чисел N в цикле for. Для каждого полученного значения проверяем, превышает ли оно 200 и является ли минимальным среди полученных. Если условие выполняется, обновляем наименьшее значение. После завершения цикла выводим минимальный результат работы алгоритма, больший 200.

mn = 10 ** 10  # Инициализация переменной для хранения минимального результата > 200


for n in range(1, 1000):  # Перебираем числа N от 1 до 999 включительно
    s = bin(n)[2:]  # Перевод в двоичную систему

    # Считаем количество единиц с помощью count,
    # находим остаток (% 2), дописываем в конец s
    s = s + str(s.count("1") % 2)
    s = s + str(s.count("1") % 2)  # Повторяем для обновлённой записи

    r = int(s, 2)  # Переводим в десятичную систему

    # Проверяем, что результат > 200, то есть подходит по условию, и меньше минимального
    if r > 200 and r < mn:
        mn = r
print(mn)

Ответ: 202

Ошибка.
Попробуйте повторить позже

Задача 46#54390Максимум баллов за задание: 1

Автомат обрабатывает натуральное число N по следующему алгоритму:

1. Строится двоичная запись числа N.

2. Складываются все цифры полученной двоичной записи. В конец записи (справа) дважды дописывается остаток от деления суммы на 2.

3. Результат переводится в десятичную систему и выводится на экран.

Пример. Дано число N = 19. Алгоритм работает следующим образом:

1. Двоичная запись числа N: 10011.

2. Сумма цифр двоичной записи 3, остаток от деления на 2 равен 1, новая запись 1001111.

3. На экран выводится число 79.

Какое наименьшее число, большее 57, может появиться на экране в результате работы автомата?

Показать ответ и решение

Решение программой В условии задачи описан алгоритм, для поиска подходящего числа N, необходимо "перевести"этот алгоритм с естественного языка на язык программирования Python. Сначала переводим число N в двоичную строку с помощью bin(), затем вычисляем сумму всех цифр полученной двоичной записи, зная, что сумма цифр двоичной записи то же самое, что и количество единиц в ней. Находим остаток от деления этой суммы на 2 (операция

Далее организуем перебор чисел N в цикле for. Для каждого полученного значения R проверяем, удовлетворяет ли оно заданному условию. Если условие выполняется, обновляем минимальное значение R.

mn = 10**10 # Инициализация переменной для хранения минимального подходящего R
for n in range(1, 200): # Перебираем все числа N от 1 до 199
    b = bin(n)[2:] # Получаем двоичную запись N (без префикса ’0b’)
    b = b + str(b.count(’1’) % 2)*2 #
    r = int(b, 2) # Преобразуем полученную двоичную строку в десятичное число R
    if r > 57: #Проверяем, что R > 57
        mn = min(mn, r) # Обновляем минимальное R
print(mn) # Выводимм результат

Ответ: 59

Ошибка.
Попробуйте повторить позже

Задача 47#54391Максимум баллов за задание: 1

Автомат обрабатывает натуральное число N по следующему алгоритму:

1. Строится двоичная запись числа N.

2. Складываются все цифры полученной двоичной записи. В конец записи (справа) дописывается остаток от деления суммы на 2.

3. Предыдущий пункт повторяется для записи с добавленной цифрой.

4. Результат переводится в десятичную систему и выводится на экран.

Пример. Дано число N = 17. Алгоритм работает следующим образом:

1. Двоичная запись числа N: 10001.

2. Сумма цифр двоичной записи 2, остаток от деления на 2 равен 0, новая запись 100010.

3. Сумма цифр полученной записи 2, остаток от деления на 2 равен 0, новая запись 1000100.

4. На экран выводится число 68.

Какое наименьшее число N надо подать автомату на обработку, чтобы на экране появилось число больше 199?

Показать ответ и решение

Решение программой

В условии задачи описан алгоритм, для поиска подходящего числа N необходимо «перевести» этот алгоритм с естественного языка на язык программирования Python. Сначала переводим число N в двоичную строку с помощью bin(), затем вычисляем сумму всех цифр полученной двоичной записи, зная, что сумма цифр двоичной записи то же самое, что количество единиц. Находим остаток от деления этой суммы на 2 и дописываем этот остаток в конец строки, используя конкатенацию строк (оператор +). Этот процесс повторяем дважды.

Далее организуем перебор чисел N в цикле for. Для каждого полученного значения R проверяем, удовлетворяет ли оно условию R > 199. Если условие выполняется, выводим текущее N и останавливаем цикл.

mn = 10**10 # Инициализация переменной для хранения минимального R > 199
for n in range(1, 300): # Перебираем все числа N от 1 до 299
    b = bin(n)[2:] # Получаем двоичную запись N (без префикса ’0b’)
    b = b + str(b.count(’1’) % 2) # Приписываем остаток от деления на 2 суммы цифр числа
    b = b + str(b.count(’1’) % 2) # Повторяем предыдущий шаг
    r = int(b, 2) # Преобразуем полученную двоичную строку в десятичное число R
    if r > 199: # Проверяем, что R > 199
        print(n) # Выводим N
        break # Останавливаем цикл

Ответ: 50

Ошибка.
Попробуйте повторить позже

Задача 48#54918Максимум баллов за задание: 1

На вход алгоритма подаётся натуральное число N > 1. Алгоритм строит по нему новое число R следующим образом:

  1. Строится двоичная запись числа N.
  2. Подсчитывается количество нулей, стоящих на нечётных местах и количество единиц, стоящих на чётных в двоичной записи числа N без ведущих нулей. Отсчёт производится слева направо. Старший разряд считать нулевой позицией.
  3. Результатом становится произведение полученных двух чисел.

При каком наименьшем N в результате работы алгоритма получится R = 12?

Показать ответ и решение

Решение программой

В условии задачи описан алгоритм, для поиска подходящего числа N необходимо «перевести» этот алгоритм с естественного языка на язык программирования Python. Сначала переводим число N в двоичную строку с помощью bin(), затем анализируем позиции цифр в этой записи, учитывая, что индексация в Python нчинается с 0. Подсчитываем количество нулей на нечетных позициях и количество единиц на четных позициях, проходясь циклом for по индексам строки двоичной записи числа.

Далее организуем перебор чисел N в цикле for. Находим произведение количества подходящих нулей и подходящих единиц и проверяем, равно ли оно 12. Если условие выполняется, выводим текущее N и завершаем поиск.

for n in range(2, 10000): # Перебираем все числа N от 1 до 9999
    r = bin(n)[2:] # Получаем двоичную запись N (без префикса ’0b’)
    sone = 0 # Переменная для подсчета количества подходящих единиц текущего числа
    szero = 0 # Переменная для подсчета количества подходящих нулей текущего числа
    for i in range(len(r)): # Перебираем все индексы в записи числа
        if i % 2 != 0 and r[i] == "0": # Если индекс нечетный и символ с данным индексом 0,
            sone += 1 # Увеличиваем счетчик
        elif i % 2 == 0 and r[i] == "1": # Если индекс четный и символ с данным индексом 1,
            szero += 1 # Увеличиваем счетчик
    if sone*szero == 12: # Вычисляем результат и проверяем, равен ли он 12
        print(n) # Выводим подходящее N
        break # Останавливаем цикл

Ответ: 85

Ошибка.
Попробуйте повторить позже

Задача 49#56306Максимум баллов за задание: 1

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

  1. Строится двоичная запись числа N.
  2. К этой записи дописываются ещё несколько разрядов по следующему правилу: если N чётное, то к нему справа дописывается 01  , если N нечетное – слева дописывается 11  и справа 0  ;
  3. Результат переводится в десятичную систему и выводится на экран.

Пример. Дано число N = 13  . Алгоритм работает следующим образом:

  1. Двоичная запись числа N: 1101  .
  2. Число нечетное, следовательно слева дописываем 11  , справа 0  → 1111010  .
  3. На экран выводится число 122  .

В результате работы автомата на экране появилось число, большее 1021  . Для какого наименьшего значения N данная ситуация возможна?

Показать ответ и решение

Решение программой
В условии задачи описан алгоритм, для поиска подходящего числа N необходимо «перевести» этот алгоритм с естественного языка на язык программирования Python. Сначала переводим число N в двоичную строку с помощью функции bin, затем вычисляем чётность N с помощью взятия остатка от деления на 2 (% 2). Если N – чётное, дописываем 01, используя конкатенацию строк (оператор +). Иначе – в конец дописываем 0, а в начало 11. Переводим результат в десятичную систему счисления, получаем R.

Далее организуем перебор чисел N в цикле for. Для каждого полученного значения R проверяем, превышает ли оно 1021. Если условие выполняется, выводим N и завершаем цикл, ведь нас интересует наименьшее N, а следующие значения N будут больше, так как цикл перебирает их по возрастанию.

for n in range(1, 10000):  # Перебираем числа N от 1 до 9999 включительно
    s = bin(n)[2:]  # Перевод в двоичную систему
    if n % 2 == 0:
        # Если n - чётно, дописываем 01, иначе 0 в конец, 11 в начало
        s += "01"
    else:
        s = "11" + s + "0"

    if int(s, 2) > 1021:  # Получаем R
        # Первое выведенное N будет минимальным
        print(n)  # Выводим N
        break  # Завершаем цикл

Ответ: 127

Ошибка.
Попробуйте повторить позже

Задача 50#56434Максимум баллов за задание: 1

Автомат обрабатывает натуральное число N по следующему алгоритму:

   1. Строится двоичная запись числа N.

   2. Складываются все цифры полученной двоичной записи. В конец записи (справа) дописывается остаток от деления суммы на 2.

   3. Предыдущий пункт повторяется для записи с добавленной цифрой.

   4. Результат переводится в десятичную систему и выводится на экран.

Пример. Дано число N = 17. Алгоритм работает следующим образом:

   1. Двоичная запись числа N: 10001.

   2. Сумма цифр двоичной записи 2, остаток от деления на 2 равен 0, новая запись 100010.

   3. Сумма цифр полученной записи 2, остаток от деления на 2 равен 0, новая запись 1000100.

   4. На экран выводится число 68.

Определите, какое число было подано на Автомат, если в результате на экране появилось наименьшее число, большее 170.

Показать ответ и решение

Решение программой
В условии задачи описан алгоритм, для поиска подходящего числа N необходимо «перевести» этот алгоритм с естественного языка на язык программирования Python. Сначала переводим число N в двоичную строку с помощью функции bin. Затем заметим, что сумма цифр двоичной записи совпадает с количеством единичек в ней, поэтому достаточно использовать count("1") для вычисления суммы цифр. Далее нужно дописать остаток от деления суммы цифр на 2, затем то же самое для обновлённой записи. Если сумма чётная, сначала допишется 0, то есть сумма цифр не изменится, соответственно, остаток тоже, тогда следующим шагом снова запишем 0. Если сумма нечётная, сначала допишем 1, сумма цифр увеличится на 1, остаток поменяется (был нечётным, стал чётным), допишем 0. Осталось перевести результат в десятичную систему счисления, получив R.

Далее организуем перебор чисел N в цикле for. Для каждого результата выполнения алгоритма проверяем, больше ли он 170 и является ли минимальным среди полученных. Если условие выполняется, обновляем наименьшее значение R и сохраняем N. После завершения цикла выводим переменную N, которая соответствует наименьшей R, большей 170.

mn = 10 ** 10  # Инициализация переменной для хранения минимального результата > 170
ans = None  # Переменая для хранения переменной N, для которой нашли mn

for n in range(1, 10000):  # Перебираем числа N от 1 до 9999 включительно
    s = bin(n)[2:]  # Перевод в двоичную систему
    if n % 2 == 0:
        # Если n - чётно, дописываем 00, иначе 10
        s += "00"
    else:
        s += "10"

    r = int(s, 2)  # Переводим в десятичную систему

    # Проверяем, что результат > 170, то есть подходит по условию, и меньше минимального
    if r > 170 and r < mn:
        mn = r
        ans = n
print(ans)

Ответ: 43

Ошибка.
Попробуйте повторить позже

Задача 51#57087Максимум баллов за задание: 1

Автомат обрабатывает натуральное число N по следующему алгоритму:

1. Строится двоичная запись числа N.

2. Складываются все цифры полученной двоичной записи. В конец записи (справа) дважды дописывается остаток от деления суммы на 2.

3. Результат переводится в десятичную систему и выводится на экран.

Пример. Дано число N = 19. Алгоритм работает следующим образом:

1. Двоичная запись числа N: 10011.

2. Сумма цифр двоичной записи 3, остаток от деления на 2 равен 1, новая запись 1001111.

3. На экран выводится число 79.

Какое наименьшее четное число, может появиться на экране в результате работы автомата, если известно, что на вход подавалось число больше 55?

Показать ответ и решение

Решение программой
В условии задачи описан алгоритм, для поиска подходящего числа R необходимо «перевести» этот алгоритм с естественного языка на язык программирования Python. Первым делом переводим число N в двоичную строку с помощью функции bin. Заметим, что сумма цифр двоичной записи совпадает с количеством единичек в ней, поэтому достаточно использовать count("1") для вычисления суммы цифр. Далее допишем остаток от деления суммы цифр на 2, используя конкатенацию строк. Осталось перевести результат в десятичную систему счисления, после чего получим R.

Далее организуем перебор чисел N > 55 в цикле for. Для каждого полученного значения R проверяем, чётное ли оно и меньше ли текущего минимума. Если условие выполняется, обновляем наименьшее значение R. После завершения цикла выводим минимальное чётное R.

mn = 10 ** 10  # Инициализация переменной для хранения минимального чётного R

for n in range(56, 1000):  # Перебор значений N > 55
    r = bin(n)[2:]  # Получаем двоичную запись числа N
    s = str(r.count(’1’) % 2)  # Находим остаток от деления суммы цифр на 2
    r = r + s + s  # Дописываем два раза остаток
    r = int(r, 2)  # Получаем итоговое число в десятичной системе счисления

    # Проверяем, что r - чётное и меньше текущего минимального
    if r % 2 == 0 and r < mn:
        mn = r
print(mn)

Ответ: 228

Ошибка.
Попробуйте повторить позже

Задача 52#57089Максимум баллов за задание: 1

Автомат обрабатывает натуральное число N по следующему алгоритму:

1. Строится двоичная запись числа N.

2. Если число N четное, то в конец записи числа (справа) дописывается 1, если N нечетное то 0.

3. Предыдущий пункт повторяется для записи с добавленной цифрой.

4. Результат переводится в десятичную систему и выводится на экран.

Пример. Дано число N = 17. Алгоритм работает следующим образом:

1. Двоичная запись числа N: 10001.

2. N не четное, поэтому в конец дописывается 0, новая запись 100010.

3. 100010 четное поэтому в конец дописывается 1, новая запись 1000101.

4. На экран выводится число 69.

Какое наибольшее число, меньше 109, может появиться на экране в результате работы автомата?

Показать ответ и решение

Решение программой
В условии задачи описан алгоритм, для поиска подходящего числа R необходимо «перевести» этот алгоритм с естественного языка на язык программирования Python. Первым делом переводим число N в двоичную строку с помощью функции bin. Действия в пунктах 2 и 3 совпадают, поэтому, чтобы избежать дублирования кода, будем использовать цикл for. Внутри него проверим последнюю цифру двоичной записи. Если это 0, то есть число чётное, допишем 1, иначе – 0. После первого повторения наша двоичная запись обновится и те же действия произойдут снова. Осталось перевести результат в десятичную систему счисления, после чего получим R.

Далее организуем перебор чисел N в цикле for. Для каждого полученного значения проверяем, меньше ли оно 109 и является ли наибольшим среди полученных. Если условие выполняется, обновляем наибольшее значение. После завершения цикла выводим максимальный результат работы алгоритма, меньший 109.

mx = 0  # Инициализация переменной для хранения максимального R > 109

for n in range(1, 1000):  # Перебираем числа N от 1 до 999 включительно
    b = bin(n)[2:]  # Перевод в двоичную систему
    for i in range(2):  # Тело цикла выполнится 2 раза
        # Если двоичная запись чётная (то есть оканчивается на 0),
        # допишем 1, иначе - 0
        if b[-1] == "0":
            b += "1"
        else:
            b += "0"
    r = int(b, 2)
    # Проверяем, что r < 109, то есть подходит по условию, и больше текущего максимума
    if r < 109 and r > mx:
        mx = r
print(mx)

Ответ: 106

Ошибка.
Попробуйте повторить позже

Задача 53#57736Максимум баллов за задание: 1

Автомат получает на вход натуральное числа N>1 и строит по нему новое число R следующим образом:
1.Строится двоичная запись числа N.
2. Подсчитывается количество нулей и единиц в полученной записи. Если их количество одинаково, в конец записи добавляется ее последняя цифра. В противном случае в конец записи добавляется цифра, которая встречается реже.
3. Шаг 2 повторяется еще раз.
4. Результат переводится в десятичную систему счисления.

При каком наибольшем исходном числе N < 300 в результате алгоритма получится число, которое делится на 3, но не делится на 6?

Показать ответ и решение

Решение программой
В условии задачи описан алгоритм, для поиска подходящего числа R необходимо «перевести» этот алгоритм с естественного языка на язык программирования Python. Первым делом переводим число N в двоичную строку с помощью функции bin. Действия в пунктах 2 и 3 совпадают, поэтому, чтобы избежать дублирования кода, будем использовать цикл for. Внутри него подсчитаем количество нулей и единиц, используя count, сравним их и допишем соответствующие цифры. Осталось перевести результат в десятичную систему счисления, после чего получим R.

Далее организуем перебор чисел N (до 300) в цикле for. Для каждого полученного значения R проверяем указанное требование. Если условие выполняется, выводим N. В ответ запишем наибольшее выведенное число.

for n in range(2, 300):  # Перебираем числа 1 < N < 300
    b = bin(n)[2:]  # Перевод в двоичную систему
    for i in range(2):  # Тело цикла выполнится 2 раза
        # Сравниваем количество единиц и нулей,
        # дописываем соответствующие цифры
        if b.count("0") == b.count("1"):
            b += b[-1]
        elif b.count("0") < b.count("1"):  # 0 встречается реже
            b += "0"
        else:  # 1 встречается реже
            b += "1"

    r = int(b, 2)  # Переводим в десятичную систему

    if r % 3 == 0 and r % 6 != 0:
        print(n)

Ответ: 297

Ошибка.
Попробуйте повторить позже

Задача 54#57740Максимум баллов за задание: 1

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число следующим образом.
1. Строится двоичная запись числа N.
2. К этой записи дописываются справа ещё два разряда по следующему правилу: если N чётное, в конец числа (справа) дописываются две цифры: сначала 0, потом 1, в противном случае справа дописываются две единицы.

Например, двоичная запись 1001 числа 9 будет преобразована в 100111. Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью числа – результата работы данного алгоритма.

Укажите минимальное число N, для которого результат работы алгоритма будет больше 279. В ответе это число запишите в десятичной системе счисления.

Показать ответ и решение

Решение программой

В условии задачи описан алгоритм, для поска подходящего числа N необходмо «перевести» этот алгоритм с естественного языка на язык программирования Python. Сначала переводим число N в двоичную строку с помощью bin(), затем проверяем его чётность. Если число чётное дописываем к нему ’01’, иначе - ’11’. Для этого используем конкатенацию строк (оператор +). После получения итоговой строки переводим её в десятичное число функцией int(строка, 2).

В цикле перебираем значения N от 0, для каждого вычисляем R и проверяем, превышает ли оно 279. Как только находим подходящее значение, выводим его и завершаем цикл.

# Перебираем все числа N от 0 до 99
for n in range(100):
    # Получаем двоичную запись числа n без префикса ’0b’
    b = bin(n)[2:]

    # Проверяем чётность числа
    if n % 2 == 0:
        b += ’01’ # Если число чётное, дописываем ’01’
    else:
        b += ’11’ # Если нечётное, дописываем ’11’

    # Переводим полученную двоичную строку в десятичное число
    r = int(b, 2)

    # Проверяем, что число r больше 279
    if r > 279:
        # Если условие выполнено, выводим n и прерываем цикл
        print(n)
        break

Ответ: 70

Ошибка.
Попробуйте повторить позже

Задача 55#57741Максимум баллов за задание: 1

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. К этой записи дописываются справа ещё два разряда по следующему правилу:

а) складываются все цифры двоичной записи числа N, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;

б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы её цифр на 2.
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R.

Укажите такое наименьшее число N, для которого результат работы данного алгоритма больше числа 126. В ответе это число запишите в десятичной системе счисления.

Показать ответ и решение

Решение программой

В условии задачи описан алгоритм, для поска подходящего числа N необходмо «перевести» этот алгоритм с естественного языка на язык программирования Python. Сначала переводим число N в двоичную строку с помощью bin(). Далее добавляем два числа в конец строки, используя используя конкатенацию строк (оператор +). Сумма цифр двочного числа - это количество единиц этого числа, поэтому считаем количество единиц при помощи метода count(). Вычисляем остаток от деления на 2 и дописываем его в конец строки. После получения итоговой строки переводим её в десятичное число функцией int(строка, 2).

В цикле перебираем значения N от 0, для каждого вычисляем R и проверяем, превышает ли оно 126. Как только находим подходящее значение, выводим его и завершаем цикл.

# Перебираем все числа N от 0 до 99
for n in range(100):
    b = bin(n)[2:]  # Двоичная запись числа N без ’0b’
    b += str(b.count(’1’) % 2)  # Добавляем бит чётности для исходной строки
    b += str(b.count(’1’) % 2)  # Добавляем бит чётности для обновлённой строки
    r = int(b, 2)  # Переводим итоговую строку в десятичное число
    # Проверяем, что число R больше 126
    if r > 126:
        print(n)  # Выводим минимальное N, удовлетворяющее условию
        break

Ответ: 32

Ошибка.
Попробуйте повторить позже

Задача 56#58078Максимум баллов за задание: 1

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1. Строится двоичная запись числа N.

2. К этой записи дописываются ещё несколько разрядов по следующему правилу:

а) если N нечётное, то к нему справа приписывается единица, а слева ноль;

б) если N чётное, то к нему справа приписывается в двоичном виде сумма цифр его двоичной записи;

Полученная таким образом запись (в ней как минимум на один разряд больше, чем в записи исходного числа N) является двоичной записью искомого числа R.

Укажите такое число N, для которого число R является наименьшим среди чисел, превышающих 250. В ответе это число запишите в десятичной системе счисления

Показать ответ и решение

Решение программой

В условии задачи описан алгоритм, для поска подходящего числа N необходмо «перевести» этот алгоритм с естественного языка на язык программирования Python. Сначала переводим число N в двоичную строку с помощью bin(), затем проверяем его чётность. Если число нечётное, дописываем слева ноль, а справа единицу, используя конкатенацию строк (оператор +). Если чётное – вычисляем сумму единиц в его двоичной записи методом count(), переводим эту сумму в двоичный вид и дописываем результат в конец строки.

Далее организуем перебор чисел N в цикле for. Для каждого полученного значения R проверяем, превышает ли оно 250 и является ли минимальным среди подходящих. Если условие выполняется, сохраняем текущее N и обновляем минимальное значение R.

mn = 10**10 # Инициализация переменной для хранения минимального R > 250
a = 0 # Переменная для сохранения искомого N

# Перебираем все числа N от 1 до 999
for n in range(1, 1000):
    # Получаем двоичную запись N (без префикса ’0b’)
    b = bin(n)[2:]

    # Проверяем четность N
    if n % 2 != 0:
        # Если N нечетное: добавляем ’0’ слева и ’1’ справа
        b = "0" + b + "1"
    else:
        # Если N четное: добавляем сумму единиц (в двоичном виде) справа
        b += bin(b.count("1"))[2:]

    # Преобразуем полученную двоичную строку в десятичное число R
    r = int(b, 2)

    # Проверяем, что R > 250 и меньше текущего минимального
    if r > 250 and r < mn:
        mn = r # Обновляем минимальное R
        a = n # Запоминаем N
print(a) # Выводим результат

Ответ: 125

Ошибка.
Попробуйте повторить позже

Задача 57#58956Максимум баллов за задание: 1

Автомат Информатик обрабатывает натуральное число N по следующему алгоритму:

1) Строится двоичная запись числа N.

2) К этой записи дописывается еще два разряда справа по следующим правилам:

   а) Ставится бит четности, т.е. если сумма цифр в двоичной записи четная, то ставится 0, иначе - 1

   б) Ставится цифра, отличная от предыдущей.

3) Полученное число переводится в десятичную запись и выводится на экран.

Укажите минимальное число N, результатом обработки которого станет число, превышающее 90?

Показать ответ и решение

Решение программой

В условии задачи описан алгоритм, для поска подходящего числа N необходмо «перевести» этот алгоритм с естественного языка на язык программирования Python. Сначала переводим число N в двоичную строку с помощью функции bin() и обрезаем префикс ’0b’. Далее считаем количество единиц в этой записи методом .count(’1’) и определяем его чётность. Если сумма единиц чётная, то справа дописываем ’01’, используя конкатенацию строк (оператор +). Если нечётная, то справа дописываем ’10’. После этого полученную двоичную строку переводим обратно в десятичную систему.

Организуем перебор всех чисел N в цикле for, начиная с 1. Для каждого N вычисляем R и проверяем, превышает ли оно 90. Как только находим первое число, удовлетворяющее условию, выводим его и завершаем цикл.

# Перебираем числа N от 1 до 999
for n in range(1, 1000):
    # Получаем двоичную запись N (без ’0b’)
    t = bin(n)[2:]

    # Проверяем чётность суммы единиц
    if t.count(’1’) % 2 == 0:
        # Если сумма чётная — добавляем ’01’
        t += ’01’
    else:
        # Если сумма нечётная — добавляем ’10’
        t += ’10’

    # Переводим обратно в десятичное число
    r = int(t, 2)

    # Если результат больше 90 — выводим и прерываем цикл
    if r > 90:
        print(n)
        break

Ответ: 23

Ошибка.
Попробуйте повторить позже

Задача 58#59302Максимум баллов за задание: 1

Автомат обрабатывает натуральное число N по следующему алгоритму:

  1. Строится двоичная запись числа N.
  2. Складываются все цифры полученной двоичной записи. В конец записи (справа) дописывается остаток от деления суммы на 2.
  3. Предыдущий пункт повторяется для записи с добавленной цифрой.
  4. Результат переводится в десятичную систему и выводится на экран.

Какое наименьшее число, большее 34, может появиться на экране в результате работы автомата?

Показать ответ и решение

Решение программой

В условии задачи описан алгоритм, для поска подходящего числа N необходмо «перевести» этот алгоритм с естественного языка на язык программирования Python. Сначала переводим число N в двоичную строку с помощью bin() и убираем префикс ’0b’. Далее дважды выполняем шаг добавления бита чётности. Сумма цифр двоичного числа - это количество единиц в этом числе. Пользуемся методом .count(’1’). Находим остаток от деления на 2 — он и есть добавляемый бит чётности. Приписываем этот бит к концу строки, используя конкатенацию строк (оператор +). После двух таких операций переводим строку обратно в десятичное число функцией int(строка, 2).

В цикле перебираем N начиная с 1, вычисляем результат R и проверяем, превышает ли он 34. Как только находим первое подходящее значение, выводим его и завершаем цикл.

# Перебираем числа N от 1 до 199
for n in range(1, 200):
    # Получаем двоичную запись числа N (без ’0b’)
    b = bin(n)[2:]

    # Первый шаг: добавляем бит чётности
    b += str(b.count(’1’) % 2)

    # Второй шаг: добавляем бит чётности к обновлённой строке
    b += str(b.count(’1’) % 2)

    # Преобразуем результат в десятичное число R
    r = int(b, 2)

    # Проверяем, что R > 34
    if r > 34:
        print(r)  # Выводим минимальное значение R
        break

Ответ: 36

Ошибка.
Попробуйте повторить позже

Задача 59#59303Максимум баллов за задание: 1

Автомат обрабатывает натуральное число N по следующему алгоритму:

  1. Строится двоичная запись числа N.
  2. В конец записи (справа) добавляется (дублируется) последняя цифра.
  3. Складываются все цифры полученной двоичной записи. В конец записи (справа) дописывается остаток от деления суммы на 2.
  4. Результат переводится в десятичную систему и выводится на экран.

Какое наименьшее число, большее 74, может появиться на экране в результате работы автомата?

Показать ответ и решение

Решение программой

В условии задачи описан алгоритм, для поска подходящего числа N необходмо «перевести» этот алгоритм с естественного языка на язык программирования Python. Сначала переводим число N в двоичную строку с помощью bin() и убираем префикс ’0b’. Далее реализуем первый шаг алгоритма — дублируем последний символ строки (b[-1]) и прибавляем его к концу записи. Сумма цифр двоичного числа - это количество единиц в жтом числе, поэтому считаем количество единиц методом .count(’1’). Находим остаток от деления на 2 и приписываем его в конец строки. После этого преобразуем полученную двоичную строку в десятичное число с помощью int(строка, 2).

Организуем перебор чисел N в цикле, начиная с 0, и проверяем, что результат превышает 74. При первом подходящем значении выводим его и завершаем цикл.

# Перебираем числа N от 0 до 199
for n in range(200):
    # Получаем двоичную запись числа N (без ’0b’)
    b = bin(n)[2:]

    # Дублируем последний символ
    b += b[-1]

    # Добавляем бит чётности
    b += str(b.count(’1’) % 2)

    # Преобразуем результат в десятичное число R
    r = int(b, 2)

    # Проверяем условие
    if r > 74:
        print(r)  # Выводим минимальное значение R
        break

Ответ: 78

Ошибка.
Попробуйте повторить позже

Задача 60#59583Максимум баллов за задание: 1

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1. Строится двоичная запись числа N.

2. К этой записи дописываются справа ещё два разряда по следующему правилу:

   а) складываются все цифры двоичной записи числа N, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;

   б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы её цифр на 2. Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R.

Укажите такое наименьшее число N, для которого результат работы данного алгоритма больше числа 124. В ответе это число запишите в десятичной системе счисления.

Показать ответ и решение

Решение программой

В условии задачи описан алгоритм, для поска подходящего числа N необходмо «перевести» этот алгоритм с естественного языка на язык программирования Python. Сначала переводим число N в двоичную строку с помощью bin(), убирая префикс ’0b’. Далее дважды выполняем операцию добавления числа в конец строки. Сумма цифр в двоичном числе - это количество единиц в этом числе, поэтому считаем количество единиц в строке методом .count(’1’). Находим остаток от деления на 2 и приписываем его к строке, используя конкатенацию строк (оператор +). После этого переводим полученную двоичную строку в десятичное число с помощью int(строка, 2).

Организуем перебор чисел N в цикле for, начиная с 1. Для каждого значения вычисляем R и проверяем, превышает ли оно 124. Как только найдено первое подходящее N, выводим его и завершаем цикл.

# Инициализация перебора чисел N
for n in range(1, 100):
    # Получаем двоичную запись N (без ’0b’)
    s = bin(n)[2:]

    # Первый шаг: добавляем бит чётности
    s += str(s.count(’1’) % 2)

    # Второй шаг: добавляем бит чётности к обновлённой строке
    s += str(s.count(’1’) % 2)

    # Переводим полученную строку в десятичное число R
    r = int(s, 2)

    # Проверяем условие R > 124
    if r > 124:
        print(n)  # Выводим минимальное подходящее N
        break

Ответ: 31
Рулетка
Вы можете получить скидку в рулетке!