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

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

Задача 1#53275

У исполнителя Составь_план_подготовки_в_закрытой_группе есть 2  команды:

1. Прибавить 2

2. Умножить на 2

Какое число будет выведено в результате работы программы 212122  при исходном числе 6  ?

 

(план подготовки и правда нужно составить, если еще не сделал этого)

Показать ответ и решение
def f(x, code):
    if code == ’1’:
        return x + 2
    if code == ’2’:
        return x * 2
n = 6
for c in ’212122’:
    n = f(n, c)
print(n)

Ответ: 120

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

Задача 2#30303

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

1) Строится шестнадцатеричная запись числа N∕∕2  , где «∕∕  » — операция деления нацело.

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

  а) если N  не делится на 4, то слева к нему приписывается «F  », а справа «A0  ».

  б) в противном случае слева приписывается «15  », а справа «C  ».

Например, N = 410 ⇒ 216 ⇒ 152C16 = 542010 = R  .

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

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

Показать ответ и решение
def f_16(n):  
    x = n  
    s = ’’  
    while x > 0:  
        h = x % 16  
        if h > 9:  
            s = chr(55 + h) + s  # По табличке ASCII  
        else:  
            s = str(h) + s  
        x //= 16  
    return s  
for i in range(1000000, 0, -1):  
    s = f_16(i // 2)  
    if i % 4 != 0: s = ’F’ + s + ’A0’  
    else: s = ’15’ + s + ’C’  
    if int(s, 16) < 1048576:  
        print(i)  
        break

Ответ: 511

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

Задача 3#30277

У исполнителя АТЛАНТ две команды, которым присвоены номера:

1. Вычти 2

2. Умножь на 3

Первая из них уменьшает число на экране на 2, вторая – увеличивает его в три раза.

Запишите порядок команд в программе получения из числа 4 число 304, содержащей не более 6 команд, указывая лишь номера команд.

Показать ответ и решение
for i in range(64):  # При >= 64 уже 7 знаков  
    s = ’0’ * (6 - len(bin(i)[2::])) + bin(i)[2::]  # Добавление незначащих  
                                                    # нулей  
    summa = 4  
    for j in s:  
        if j == ’0’:  
            summa -= 2  
        if j == ’1’:  
            summa *= 3  
    if summa == 304:  
        print(s, summa)

Ответ: 221221

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

Задача 4#30276

У исполнителя Математик есть две команды:

1. Прибавить 3,

2. Умножить на 2.

Первая команда увеличивает число на 3, а вторая удваивает его.

Запишите порядок команд в программе преобразования числа 2 в число 52, содержащей не более 5 команд, указывая лишь номера команд. Если таких программ более одной, то запишите любую из них.

Показать ответ и решение
for i in range(32):  # При >= 32 уже 6 знаков  
    s = ’0’ * (5 - len(bin(i)[2::])) + bin(i)[2::]  # Добавление незначащих  
                                                    # нулей  
    summa = 2  
    for j in s:  
        if j == ’0’:  
            summa += 3  
        if j == ’1’:  
            summa *= 2  
    if summa == 52:  
        print(s, summa)

Ответ: 12122

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

Задача 5#30275

Исполнитель КВАДРАТОР имеет две команды, которым присвоены номера:

1. умножь на 2

2. прибавь 2

Выполняя команду номер 1  , КВАДРАТОР умножает число на экране на 2  , а выполняя команду номер 2  , прибавляет к этому числу 2  . Напишите программу, содержащую не более 4  команд, которая из числа 3  , не проходя через числа 7  и 8  , получает число 40  . Укажите лишь номера команд.

Показать ответ и решение
for i in range(16):  # При >= 16 уже 5 знаков  
    s = ’0’ * (4 - len(bin(i)[2::])) + bin(i)[2::]  # Добавление незначащих  
                                                    # нулей  
    flag = True  # Проверка на попадание на 7 или 8  
    summa = 3  
    for j in s:  
        if j == ’0’:  
            summa *= 2  
        if j == ’1’:  
            summa += 2  
        if summa in [7, 8]:  
            flag = False  
    if flag and summa == 40:  
        print(s)  

Ответ: 2111

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

Задача 6#26111

Исполнитель КВАДРАТОР имеет две команды, которым присвоены номера:

1. умножь на 2

2. прибавь 2

Выполняя команду номер 1  , КВАДРАТОР умножает число на экране на 2  , а выполняя команду номер 2  , прибавляет к этому числу 2  . Напишите программу, содержащую не более 4  команд, которая из числа 3  , не проходя через числа 7  и 8  , получает число 16  . Укажите лишь номера команд.

Показать ответ и решение
def f(a, b, commands):
    if a > b or len(commands) > 4 or a == 7 or a == 8:
        return 0
    if a == b:
        print(commands)
        return 1
    return f(a * 2, b, commands + ’1’) + f(a + 2, b, commands + ’2’)

f(3, 16, ’’)

Ответ: 1122

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

Задача 7#25924

У исполнителя АТЛАНТ две команды, которым присвоены номера:

  1. Вычти 2  ;
  2. Умножь на 3  .

Первая из них уменьшает число на экране на 2  , вторая – увеличивает его в три раза.

Запишите порядок команд в программе получения из числа 4  числа 50  , содержащей не более 6  команд, указывая лишь номера команд.

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

Решение кодом

for k1 in (’120’):
    for k2 in (’120’):
        for k3 in (’120’):
            for k4 in (’120’):
                for k5 in (’120’):
                    for k6 in (’120’):
                        s = k1 + k2 + k3 + k4 + k5 + k6
                        start = 4
                        for x in s:
                            if x == ’1’:
                                start -= 2
                            if x == ’2’:
                                start *= 3
                            else:
                                start += 0
                        if start == 50:
                            print(s)

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

Решение аналитически

Представим, что нам надо получить из 50  число 4  обратными командами, то есть прибавить 2  (1)  и поделить на        3  (2)  . Прибавляем к 50  число 2  два раза, получаем 54  , делим его на 3  , получаем 18  , еще раз делим на 3  , получаем 6  , делим на 3  , получаем 2  , прибавляем 2  , получаем 4  . Получается: 112221  . Эту последовательность надо развернуть, так как команды были обратные. Ответ: 122211  .

Ответ: 122211

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

Задача 8#7531

Исполнитель обезьянка живет на числовой оси. Начальное положение обезьянки точка 0. Система команд исполнителя:

1. Вверх k;

2. Вниз 3;

Определите наименьшее число k ( k > 1 ), если при конечном положении 16 команда (2) встречалась в программе минимум 3 раза.

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

Пусть x  – количество команд (1), а y  – количество команд (2). Тогда верно равенство:

kx − 3y = 16;

kx = 16 + 3y;

Так как команда (2) встречалась в программе минимум 3 раза - то есть 3 или больше, попробуем найти такие x  и y  , чтобы k  было минимальным и больше 1.

Попробуем k = 2  :

2x − 3y = 16  , при y ≥ 3  .

Попробуем y = 3  : тогда 2x =  25  , что не имеет решений, так как x  натуральное.

Попробуем y = 4  : тогда x = 14  и всё работает. Значит, ответ k = 2  .

Ответ: 2

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

Задача 9#7530

У исполнителя прибавлятор есть 2 команды:
1. Прибавить к числу 2
2. Прибавит к числу 1
Напишите для него программу ,состоящую из номеров команд, которая переводит число 4 в 11 за 4 команды.

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

Одним из оптимальных методов решения является написание программы шаг зашагом приближающей число к ответу. По началу выполняем командыувеличивающие число на наибольшую возможную величину, в данном случаепри помощи первой команды. Так прибавляя трижды по 2 доходим до 10,после чего необходимо прибавить только единицу. В данном заданиинесколько вариантов правильных комбинаций команд т. к. ихпоследовательность не имеет значения.

Ответ: 1112 или любая другая комбинация этих команд

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

Задача 10#7136

Исполнитель обезьянка живет на числовой оси. Начальное положение обезьянки точка 0. Система команд исполнителя:

1. Вверх k;

2. Вверх 2;

Определите наименьшее число k ( k > 1 ), если при конечном положении 163 команда (2) встречалась в программе минимум 10 раз.

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

Пусть x  – количество команд (1), а y  – количество команд (2). Тогда верно равенство:

kx + 2y = 163  ;

kx = 163 − 2y  ;

Попробуем взять минимальное k = 2  , тогда 2x = 163 − 2y  , при всех y  справа будет нечетное число, а слева мы нечетное никак не получим, значит k = 2  не подходит.

Возьмем k = 3  , тогда 3x = 163 − 2y  – можно взять, например x = 41  , y = 20  , значит 3  - ответ

Ответ: 3

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

Задача 11#7135

Исполнитель обезьянка живет на числовой оси. Начальное положение обезьянки точка 0. Система команд исполнителя:

1. Вверх k;

2. Вверх 4;

Определите наименьшее число k ( k > 1 ), если при конечном положении 101 команда (2) встречалась в программе минимум 5 раз.

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

Пусть x  – количество команд (1), а y  – количество команд (2). Тогда верно равенство:

kx + 4y = 101  ;

kx = 101 − 4y  ;

Т.к. данное выражение может быть верным при y  хотя бы 5, подставим его в выражение. Тогда kx =  81  . Откуда k  – делитель числа 81  . Значит, K =  {1,3,9,27,81 } . Т.к по условию необходимо найти минимальное k  , которое больше единицы, выбираем K  = 3  .

Ответ: 3

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

Задача 12#7134

Исполнитель обезьянка живет на числовой оси. Начальное положение обезьянки точка 0. Система команд исполнителя:

1. Вверх k;

2. Вверх 3;

Определите наименьшее число k ( k > 1 ), если при конечном положении 34 команда (2) встречалась в программе минимум 3 раза.

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

Пусть x  – количество команд (1), а y  – количество команд (2). Тогда верно равенство:

kx + 3y = 34  ;

kx = 34 − 3y  ;

Попробуем взять минимальное k = 2  , тогда 2x = 34 − 3y  — возьмем, например, x = 11  , y = 4  , значит 2  - ответ

Ответ: 2

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

Задача 13#7133

Исполнитель обезьянка живет на числовой оси. Начальное положение обезьянки точка 0. Система команд исполнителя:

1. Вверх k;

2. Вниз 10;

Определите наименьшее число k ( k > 1 ), если при конечном положении 19 команда (2) встречалась в программе минимум 3 раза.

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

Пусть x  – количество команд (1), а y  – количество команд (2). Тогда верно равенство:

kx − 10y = 19  ;

kx = 19 + 10y  ;

Попробуем взять минимальное k = 2  , тогда 2x = 19 + 10y  , при всех y  справа будет нечетное число, а слева мы нечетное никак не получим, значит k = 2  не подходит.

Возьмем k = 3  , тогда 3x = 19 + 10y  – можно взять, например x = 23  , y = 5  , значит 3  - ответ

Ответ: 3

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

Задача 14#7132

Исполнитель обезьянка живет на числовой оси. Начальное положение обезьянки точка 0. Система команд исполнителя:

1. Вверх k;

2. Вниз 4;

Определите наименьшее число k ( k > 1 ), если при конечном положении 3 команда (2) встречалась в программе минимум 3 раза.

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

Пусть x  – количество команд (1), а y  – количество команд (2). Тогда верно равенство:

kx − 4y = 3  ;

kx = 3 + 4y  ;

Т.к. данное выражение может быть верным при y  хотя бы 3, подставим его в выражение. Тогда kx =  15  . Откуда k  – делитель числа 15  . Значит, K  =  {1,3,5,15} . Т.к по условию необходимо найти минимальное k  , которое больше единицы, выбираем K  = 3  .

Ответ: 3

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

Задача 15#7131

Исполнитель обезьянка живет на числовой оси. Начальное положение обезьянки точка 0. Система команд исполнителя:

1. Вверх k;

2. Вниз 8;

Определите наименьшее число k ( k > 1 ), если при конечном положении 4 команда (2) встречалась в программе минимум 4 раза.

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

Пусть x  – количество команд (1), а y  – количество команд (2). Тогда верно равенство:

kx − 8y = 4  ;

kx = 4 + 8y  ;

Т.к. данное выражение может быть верным при y  хотя бы 4, подставим его в выражение. Тогда kx =  36  . Откуда k  – делитель числа 36  . Значит, K  = {1, 2,3,4,6,9,12,18, 36} . Т.к по условию необходимо найти минимальное k  , которое больше единицы, выбираем K  =  2  .

Ответ: 2

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

Задача 16#7130

Исполнитель обезьянка живет на числовой оси. Начальное положение обезьянки точка 0  . Система команд исполнителя:

  1. Вверх k  ;
  2. Вниз 11  .

Определите наименьшее натуральное число k  (k > 1  ), если при конечном положении 15  команда (2  ) встречалась в программе ровно 6  раз.

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

Пусть x  – количество команд (1), а y  – количество команд (2). Тогда верно равенство:

kx − 11y = 15  ;

kx = 15 + 11y  ;

Т.к. данное выражение может быть верным при y  равным 6, подставим его в выражение. Тогда kx =  81  . Откуда k  – делитель числа 81  . Значит, K =  {1,3,9,27,81 } . Т.к по условию необходимо найти минимальное k  , которое больше единицы, выбираем K  = 3  .

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

for k in range(2, 100):
    fl = 0
    for x in range(100):
        if (k * x - 11 * 6 == 15):
            fl = 1
            a = k
    if fl:
        print(a)
        break

Ответ: 3

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

Задача 17#7129

Исполнитель обезьянка живет на числовой оси. Начальное положение обезьянки точка 0. Система команд исполнителя:

1. Вверх k;

2. Вниз 2;

Определите наименьшее число k ( k > 1 ), если при конечном положении 15 команда (2) встречалась в программе минимум 2 раза.

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

Пусть x  – количество команд (1), а y  – количество команд (2). Тогда верно равенство:

kx − 2y = 15  ;

kx = 15 + 2y  ;

Попробуем взять минимальное k = 2  , тогда 2x = 15 + 2y  , при всех y  справа будет нечетное число, а слева мы нечетное никак не получим, значит k = 2  не подходит.

Возьмем k = 3  , тогда 3x = 15 + 2y  – можно взять, например x = 11  , y = 9  , значит 3  - ответ

Ответ: 3

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

Задача 18#7128

Исполнитель обезьянка живет на числовой оси. Начальное положение обезьянки точка 0. Система команд исполнителя:

1. Вверх k;

2. Вниз 3;

Определите наименьшее число k ( k > 1 ), если при конечном положении 70 команда (2) встречалась в программе минимум 5 раз.

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

Пусть x  – количество команд (1), а y  – количество команд (2). Тогда верно равенство:

kx − 3y = 70  ;

kx = 70 + 3y  ;

Попробуем взять минимальное k = 2  , тогда 2x = 70 + 3y  — возьмем, например, x = 50  , y = 10  , значит 2  - ответ

Ответ: 2

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

Задача 19#7127

Исполнитель обезьянка живет на числовой оси. Начальное положение обезьянки точка 0. Система команд исполнителя:

1. Вверх k;

2. Вниз 4;

Определите наименьшее число k ( k > 1 ), если при конечном положении 91 команда (2) встречалась в программе минимум 2 раза.

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

Пусть x  – количество команд (1), а y  – количество команд (2). Тогда верно равенство:

kx − 4y = 91  ;

kx = 91 + 2y  ;

Т.к. данное выражение может быть верным при y  хотя бы 2, подставим его в выражение. Тогда kx =  99  . Откуда k  – делитель числа 99  . Значит, K  = {1,3,9, 11,33,99} . Т.к по условию необходимо найти минимальное k  , которое больше единицы, выбираем K  =  3  .

Ответ: 3

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

Задача 20#7126

Исполнитель обезьянка живет на числовой оси. Начальное положение обезьянки точка 0. Система команд исполнителя:

1. Вверх k;

2. Вниз 7;

Определите наименьшее число k ( k > 1 ), если при конечном положении 56 команда (2) встречалась в программе минимум 3 раза.

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

Пусть x  – количество команд (1), а y  – количество команд (2). Тогда верно равенство:

kx − 7y = 56  ;

kx = 56 + 7y  ;

Попробуем взять минимальное k = 2  , тогда 2x = 56 + 7y  — возьмем, например, x = 63  , y = 10  , значит 2  - ответ

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