23.01 Количество программ из A в B
Ошибка.
Попробуйте повторить позже
Исполнитель Калькулятор преобразует число, записанное на экране.
У исполнителя есть две команды, которым присвоены номера:
1. Прибавь 2,
2. Умножь на 3.
Первая из них увеличивает число на экране на , вторая — увеличивает его в раза.
Программа для Калькулятора — это последовательность команд.
Сколько есть программ, которые преобразуют число в число ?
Решение аналитикой:
Количество программ, которые преобразуют число 2 в число обозначим Число 2 у нас уже
есть, значит, его можно получить с помощью “пустой” программы. Любая непустая программа увеличит
исходное число, т.е. даст число, больше 2. Значит, Для каждого следующего числа
рассмотрим, из какого числа оно может быть получено за одну команду исполнителя. Если число не
делится на три, то оно может быть получено только из предыдущего с помощью команды прибавь 2.
Значит, количество искомых программ для такого числа равно количеству программ для предыдущего
возможного числа:
Если число на три делится, то вариантов последней команды два: прибавь 2 и умножь на 3, тогда
Заполним таблицу по данной формуле:
Отсюда видим, что всего программ 15.
Решение программой:
a = [0] * 100 a[2] = 1 for i in range(3, 42 + 1): a[i] = a[i - 2] if i % 3 == 0: a[i] += a[i // 3] print(a[42])
Ошибка.
Попробуйте повторить позже
Исполнитель М.Е.М.249 преобразует целое число, записанное на экране.
У исполнителя две команды, которым присвоены номера:
преобразует целое число, записанное на экране.
1. Прибавить 1,
2. Прибавить 2,
3. Прибавить предыдущее.
Первая команда увеличивает число на экране на 1, вторая увеличивает это число на 2, третья
прибавляет к числу на экране число, меньшее на 1 (к числу 3 прибавляется 2, к числу 11 прибавляется
10 и т. д.).
Программа для исполнителя М.Е.М.249 – это последовательность команд.
Сколько существует программ, которые число 1 преобразуют в число 10?
Обозначим число программ, преобразующих число 2 в число n как Тогда число может быть
получено либо прибавлением к либо к либо из некоторого числа увеличением на
так что откуда так могут быть получены только нечетные
числа.
Тогда для четных чисел а для нечетных — ).
Заполним таблицу по данным формулам:
Ошибка.
Попробуйте повторить позже
Исполнитель МЕГАТРОН преобразует число, записанное на экране.
У исполнителя есть две команды, которым присвоены номера:
1. Прибавь 1,
2. Прибавь 2.
Первая из них увеличивает число на экране на 1, вторая — увеличивает его на 2.
Программа для МЕГАТРОНа — это последовательность команд.
Сколько есть программ, которые преобразует число 1 в число 9?
Количество программ, которые преобразуют число 1 в число обозначим Число 1 у нас уже
есть, значит, его можно получить с помощью “пустой” программы. Любая непустая программа увеличит
исходное число, т.е. даст число, больше 1. Значит, Для каждого следующего числа
рассмотрим, из какого числа оно может быть получено за одну команду исполнителя. Число “2”
может быть получено только из числа “1” командой под номером 1. Отсюда Число
“3” можем получить из чисел 1 и 2 — Число “4” получаем из 2 и
3 — Можем заметить, что количество программ для получения
числа n находится по формуле — Составим таблицу по данной
формуле:
Ошибка.
Попробуйте повторить позже
Исполнитель ХЛЕБУШЕК преобразует число, записанное на экране.
У исполнителя есть три команды, которым присвоены номера:
1. Прибавь 1,
2. Прибавь 2,
3. Прибавь 3.
Первая из них увеличивает число на экране на 1, вторая — увеличивает его на 2, третья — увеличивает
его на 3.
Программа для ХЛЕБУШКа — это последовательность команд.
Сколько есть программ, которые преобразуют число 1 в число 14?
Количество программ, которые преобразуют число 1 в число n, обозначим Число 1 у нас уже
есть, значит, его можно получить с помощью “пустой” программы. Любая непустая программа увеличит
исходное число, т.е. даст число, больше 1. Значит, Для каждого следующего числа
рассмотрим, из какого числа оно может быть получено за одну команду исполнителя. Число “2” может
быть получено только из числа “1” командой под номером 1. Отсюда Число “3”
можем получить из чисел 1 и 2 — Число “4” получаем из 1, 2 и 3 —
Заметим, что количество программ для получения числа n
находится по формуле — Составим таблицу по данной
формуле:
Ошибка.
Попробуйте повторить позже
Исполнитель Прибавлялка имеет две команды, которым присвоены номера:
1. Прибавь 1,
2. Увеличь старшую цифру числа на 1.
Первая из них увеличивает число на экране на 1, вторая увеличивает на 1 старшую (левую) цифру
числа, например число 63 с помощью такой команды превратится в число 73. Если старшая цифра
числа равна 9, то вторая команда оставляет это число неизменным.
Программа для Прибавлялки — это последовательность команд.
Сколько есть программ, которые число 31 преобразуют в число 53?
Обе команды увеличивают исходное число. Старшая цифра — 3, следовательно, использовать команду 2
более двух раз бессмысленно.
Выпишем программы, в которых команда 2 используется два раза: 1122, 2211, 1212, 2121, 2112, 1221.
Итого 6 программ.
Выпишем программы, в которых команда 2 используется один раз. Использовав эту команду в первой
позиции, мы получим из числа 31 число 41, следовательно, после этого необходимо будет дописать ещё
12 команд 1 чтобы получить число 53. Таким образом, получаем программы: и. т. д.
Итого имеем 13 программ (двойка побывала в каждой позиции).
Существует лишь одна программа, в которой команда 2 не используется:
Таким образом получаем
Ошибка.
Попробуйте повторить позже
Исполнитель преобразует целое число, записанное на экране.
У исполнителя три команды. Каждой команде присвоен номер:
1. Прибавить 1,
2. Прибавить 2,
3. Умножить на 4
Первая из них увеличивает число на экране на 1, второе - увеличивает его на 2, третья - увеличивает его в 4 раза.
Программа - это последовательность команд.
Сколько есть программ, которые преобразуют число 2 в число 17?
Количество программ, которые преобразуют число 2 в число n, обозначим R(n). Число 2 у нас уже есть, значит, его можно получить с помощью “пустой” программы. Любая непустая программа увеличит исходное число, т.е. даст число, больше 2. Значит, R(2) = 1. Для каждого следующего числа рассмотрим, из какого числа оно может быть получено за одну команду исполнителя. Если число не делится на 4, то оно может быть получено командами 1 и 2. Значит, количество искомых программ для такого числа равно количеству программ для предыдущего возможного числа: .
Если число делится на 4, то вариантов последней команды три: прибавить 1, прибавить 2 и
умножить на 4, тогда . Заполним таблицу по данной
формуле:
Ошибка.
Попробуйте повторить позже
Исполнитель ЕЩЕНКО преобразует целое число, записанное на экране.
У исполнителя две команды, которым присвоены номера:
1. Прибавь 2,
2. Умножь на 10.
Первая из них увеличивает число на экране на 2, второе - увеличивает его в 10 раз.
Программа для Калькулятора - это последовательность команд.
Сколько есть программ, которые преобразуют число 2 в число 40?
Количество программ, которые преобразуют число 2 в число n, обозначим . Число 2 у нас уже
есть, значит, его можно получить с помощью “пустой” программы. Любая непустая программа увеличит
исходное число, т.е. даст число, больше 2. Значит, . Для каждого следующего числа
рассмотрим, из какого числа оно может быть получено за одну команду исполнителя. Если число не
делится на десять, то оно может быть получено только из предыдущего с помощью команды прибавь 2.
Значит, количество искомых программ для такого числа равно количеству программ для предыдущего
возможного числа: .
Если число делится на 10, то вариантов последней команды два: прибавь 2 и умножь на 10, тогда
. Заполним таблицу по данной формуле:
Отсюда получаем искомое количество программ - 3.
Ошибка.
Попробуйте повторить позже
Исполнитель Крабоед преобразует число, записанное на экране. У исполнителя есть команды, которым присвоены номера:
1. Прибавить ,
2. Прибавить .
Первая команда увеличивает число на экране на , вторая — увеличивает на . Программа для исполнителя Крабоед — это последовательность команд.
Сколько существует программ, для которых при исходном числе результатом является число ?
Решение динамикой
a = [0] * (10 + 1) # Создаем ячейки до конечного числа включительно a[1] = 1 # Задаём начало в числе 1 for i in range(2, 10 + 1): # В текущее число i можно попасть командой +1 и +2 a[i] = a[i - 1] + a[i - 2] print(a[10])
Решение рекурсией
# Аргумент a - текущее число, к которому применяются команды def f(a): if a > 10: # Число стало больше конечного результата, его достигнуть уже не выйдет return 0 # Возвращаем 0, не изменяющее количество траекторий if a == 10: # Достигли конечного результата return 1 # Возвращаем 0, увеличивающее количество траекторий на 1 return f(a + 1) + f(a + 2) # Суммируем количество траекторий от рекурсивных вызовов print(f(1)) # Запускаем функцию от исходного числа 1
Ошибка.
Попробуйте повторить позже
Исполнитель преобразует число на экране.
У исполнителя есть две команды, которым присвоены номера:
1. Прибавить 1
2. Умножить на 2
Первая команда увеличивает число на экране на 1, вторая увеличивает число в 2 раза.
Программа для исполнителя – это последовательность команд.
Сколько существует программ, которые преобразуют исходное число 1 в число 16?
Решение динамикой
a = [0] * (16 + 1) # Создаем ячейки до конечного числа включительно a[1] = 1 # Задаём начало в числе 1 for i in range(2, 16 + 1): a[i] = a[i - 1] # В текущее число можно попасть командой +1 if i % 2 == 0: # Если в текущее число можно было попасть командой *2 a[i] += a[i // 2] print(a[16])
Решение рекурсией
def f(a): if a > 16: return 0 if a == 16: return 1 return f(a + 1) + f(a * 2) print(f(1))
Решение руками
В четные числа мы можем попасть из числа деленного на 2 или предыдущего, а в нечетные только из предыдущих.
Получается, что в число 2 мы можем попасть из 1 двумя разными способами.
В число 3 мы можем попасть только из 2.
В число 4 мы можем попасть из 2 или 3.
В число 5 мы можем попасть только из 4.
И т.д.
Ошибка.
Попробуйте повторить позже
Дед Мороз написал программу для исполнителя ЮП, который преобразовывает числа. У исполнителя ЮП две команды, которым присвоены номера:
1. прибавь 1,
2. прибавь 3.
Первая из них увеличивает на 1 число на экране, вторая увеличивает это число на 3.
Программа для ЮП — это последовательность команд.
Сколько существует программ, которые число 5 преобразуют в число 42?
a[5] = 1
for i in range(6,43):
a[i] = a[i-1]+a[i-3]
print(a[42])
Ошибка.
Попробуйте повторить позже
Также Дед мороз написал ещё одного исполнителя ДЮ, который всё также преобразовывает числа. У исполнителя ДЮ три команды, которым присвоены номера:
- прибавь 2,
- умножь 3,
- прибавь 1.
Первая из них увеличивает на 2 число на экране, вторая увеличивает это число в 3 раза, третья - увеличивает на 1.
Программа для ДЮ — это последовательность команд.
Сколько существует программ, которые число 4 преобразуют в число 63?
a = [0] * 64 a[4] = 1 for i in range(5, 64): a[i] = a[i - 1] + a[i - 2] + a[i // 3] * (i % 3 == 0) print(a[63])
Ошибка.
Попробуйте повторить позже
Исполнитель ЕЛОЧКА преобразует число, записанное на экране.
У исполнителя есть команды, которым присвоены номера:
- Прибавить
- Прибавить
Первая команда увеличивает число на экране на , вторая — на .
Сколько существует программ, для которых при исходном числе результатом является число ? Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Решение 1
num = [0]*50 num[7] = 1 for i in range(8, 50): num[i] = num[i-1] + num[i-10] print(num[49])
Решение 2
a = [0] * 60 a[7] = 1 for i in range(7, 50): a[i + 1] += a[i] a[i + 10] += a[i] print(a[49])
Ошибка.
Попробуйте повторить позже
Исполнитель ГИРЛЯНДА преобразует число, записанное на экране.
У исполнителя есть команды, которым присвоены номера:
1. Прибавить 1,
2. Прибавить 3
Первая команда увеличивает число на экране на 1, вторая — на 3.
Сколько существует программ, для которых при исходном числе 4 результатом является число 30? Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы 121 при исходном числе 1 траектория будет состоять из чисел 2, 5, 6.
num[4] = 1
for i in range(5, 31):
num[i] = num[i-1]+num[i-3]
print(num[30])
Ошибка.
Попробуйте повторить позже
Исполнитель ПОДАРОК преобразует число, записанное на экране.
У исполнителя есть команды, которым присвоены номера:
1. Прибавить ,
2. Прибавить
Первая команда увеличивает число на экране на , вторая — на .
Сколько существует программ, для которых при исходном числе результатом является число ? Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы при исходном числе траектория будет состоять из чисел .
num[1] = 1
for i in range(2, 20):
num[i] = num[i-2]+num[i-5]*(i > 5)
print(num[19])
Ошибка.
Попробуйте повторить позже
Исполнитель Крабокраб преобразует число, записанное на экране.
У исполнителя есть команды, которым присвоены номера:
- Прибавить ;
- Прибавить .
Первая команда увеличивает число на экране на , вторая — на .
Сколько существует программ, для которых при исходном числе результатом является число ? Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы при исходном числе траектория будет состоять из чисел .
num[1] = 1
for i in range(2, 129):
num[i] = num[i-1]+num[i-4]
print(num[128])
Ошибка.
Попробуйте повторить позже
Исполнитель Крабовсад преобразует число, записанное на экране.
У исполнителя есть команды, которым присвоены номера:
1. Прибавить
2. Прибавить
Первая команда увеличивает число на экране на , вторая — на .
Сколько существует программ, для которых при исходном числе результатом является число ? Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
num = [0]*60 num[7] = 1 for i in range(8, 60): num[i] = num[i-1] + num[i-10] print(num[49])
Ошибка.
Попробуйте повторить позже
Исполнитель РОКЕТ преобразует число, записанное на экране.
У исполнителя есть команды, которым присвоены номера:
1. Прибавить 1,
2. Прибавить 3
Первая команда увеличивает число на экране на 1, вторая на 3.
Сколько существует программ, для которых при исходном числе 4 результатом является число 30? Траектория вычислений программы это последовательность результатов выполнения всех команд программы. Например, для программы 121 при исходном числе 1 траектория будет состоять из чисел 2, 5, 6.
num[4] = 1
for i in range(5, 31):
num[i] = num[i-1]+num[i-3]
print(num[30])
Ошибка.
Попробуйте повторить позже
Исполнитель МАШИНА преобразует число, записанное на экране.
У исполнителя есть команды, которым присвоены номера:
1. Прибавить 2,
2. Прибавить 5
Первая команда увеличивает число на экране на 2, вторая на 5.
Сколько существует программ, для которых при исходном числе 1 результатом является число 19? Траектория вычислений программы это последовательность результатов выполнения всех команд программы. Например, для программы 121 при исходном числе 1 траектория будет состоять из чисел 3, 8, 10.
num[1] = 1
for i in range(2, 20):
num[i] = num[i-2]+num[i-5]*(i > 5)
print(num[19])
Ошибка.
Попробуйте повторить позже
Исполнитель Крабик преобразует число на экране. У исполнителя есть две команды, которым присвоены номера:
- Прибавить ;
- Умножить на .
Программа для исполнителя Крабика — это последовательность команд. Сколько существует программ, которые число преобразуют в число ?
Решение 1
a = [0] * 56 a[1] = 1 for i in range(2, 56): a[i] = a[i - 1] + a[i // 4] * (i % 4 == 0) print(a[55])
Решение 2
a = [0] * 55 * 4 + 1 a[1] = 1 for i in range(1, 55): a[i + 1] += a[i] a[i * 4] += a[i] print(a[55])
Ошибка.
Попробуйте повторить позже
Исполнитель АИ решает -и задачи. Когда он выбирает, сколько еще задач он хочет решить, он выполняет одно из двух действий:
- Увеличить количество решенных задач на
- Решить еще столько задач, чтобы суммарное число уже решенных задач увеличилось в раза. Действие допустимо, если АИ уже решил четное количество задач.
Пока что АИ решил только задачу. Сколькими способами АИ может сделать так, чтобы число решенных задач стало равно ?
Решение 1 (Рекурсия)
def f(s, fi): if s > fi: return 0 if s == fi: return 1 if s % 2 != 0: return f(s + 1, fi) else: return f(s + 1, fi) + f(s * 1.5, fi) print(f(1, 20))
Решение 2 (Динамика)
a = [0] * 21 a[1] = 1 for i in range(2, 21): a[i] = a[i - 1] + a[i - i // 3] * (i % 3 == 0) print(a[20])